# -*- coding: utf-8 -*-
#---------------------------------------------------------------------------
# Copyright 2023 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 warnings import warn

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 ALBAuthToken(VapiStruct):
    """
    ALB Auth Token

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



    _canonical_to_pep_names = {
                            'expires_at': 'expires_at',
                            'hours': 'hours',
                            'token': 'token',
                            'username': 'username',
                            }

    def __init__(self,
                 expires_at=None,
                 hours=None,
                 token=None,
                 username=None,
                ):
        """
        :type  expires_at: :class:`str` or ``None``
        :param expires_at: Expiry time of the token will be set by LCM at the time of
            Enforcement Point Creation.
        :type  hours: :class:`str` or ``None``
        :param hours: Hours to validate the token
        :type  token: :class:`str` or ``None``
        :param token: Token for Avi Controller.
        :type  username: :class:`str` or ``None``
        :param username: controller username.
        """
        self.expires_at = expires_at
        self.hours = hours
        self.token = token
        self.username = username
        VapiStruct.__init__(self)


ALBAuthToken._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_auth_token', {
        'expires_at': type.OptionalType(type.StringType()),
        'hours': type.OptionalType(type.StringType()),
        'token': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    ALBAuthToken,
    False,
    None))



class ALBControllerAdminCredential(VapiStruct):
    """
    Advanced Load Balancer Controller admin user credential for validation.

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



    _canonical_to_pep_names = {
                            'clustering_id': 'clustering_id',
                            'password': 'password',
                            }

    def __init__(self,
                 clustering_id=None,
                 password=None,
                ):
        """
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  password: :class:`str` or ``None``
        :param password: Password for the NSX Advanced Load Balancer Controller Cluster
            admin user.
        """
        self.clustering_id = clustering_id
        self.password = password
        VapiStruct.__init__(self)


ALBControllerAdminCredential._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_admin_credential', {
        'clustering_id': type.OptionalType(type.StringType()),
        'password': type.OptionalType(type.StringType()),
    },
    ALBControllerAdminCredential,
    False,
    None))



class ALBControllerBackupConfiguration(VapiStruct):
    """
    Advanced Load Balancer Controller Backup Configuration

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



    _canonical_to_pep_names = {
                            'backup_location': 'backup_location',
                            'backup_passphrase': 'backup_passphrase',
                            'clustering_id': 'clustering_id',
                            'password': 'password',
                            'server_address': 'server_address',
                            'username': 'username',
                            }

    def __init__(self,
                 backup_location=None,
                 backup_passphrase=None,
                 clustering_id=None,
                 password=None,
                 server_address=None,
                 username=None,
                ):
        """
        :type  backup_location: :class:`str` or ``None``
        :param backup_location: Directory in backup server.
        :type  backup_passphrase: :class:`str` or ``None``
        :param backup_passphrase: Passphrase for in the backup.
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  password: :class:`str` or ``None``
        :param password: Backup server password.
        :type  server_address: :class:`str` or ``None``
        :param server_address: Backup server address. format: hostname-or-ipv4
        :type  username: :class:`str` or ``None``
        :param username: Backup server username.
        """
        self.backup_location = backup_location
        self.backup_passphrase = backup_passphrase
        self.clustering_id = clustering_id
        self.password = password
        self.server_address = server_address
        self.username = username
        VapiStruct.__init__(self)


ALBControllerBackupConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_backup_configuration', {
        'backup_location': type.OptionalType(type.StringType()),
        'backup_passphrase': type.OptionalType(type.StringType()),
        'clustering_id': type.OptionalType(type.StringType()),
        'password': type.OptionalType(type.StringType()),
        'server_address': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    ALBControllerBackupConfiguration,
    False,
    None))



class ALBControllerCertificate(VapiStruct):
    """
    Advanced Load Balancer Controller portal certificate

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



    _canonical_to_pep_names = {
                            'cert': 'cert',
                            'clustering_id': 'clustering_id',
                            'csr': 'csr',
                            'name': 'name',
                            }

    def __init__(self,
                 cert=None,
                 clustering_id=None,
                 csr=None,
                 name=None,
                ):
        """
        :type  cert: :class:`str` or ``None``
        :param cert: Advanced Load Balancer Controller portal certificate or CSR.
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  csr: :class:`str` or ``None``
        :param csr: Advanced Load Balancer Controller portal certificate or CSR.
        :type  name: :class:`str` or ``None``
        :param name: Name of Advanced Load Balancer Controller portal certificate or
            CSR.
        """
        self.cert = cert
        self.clustering_id = clustering_id
        self.csr = csr
        self.name = name
        VapiStruct.__init__(self)


ALBControllerCertificate._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_certificate', {
        'cert': type.OptionalType(type.StringType()),
        'clustering_id': type.OptionalType(type.StringType()),
        'csr': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
    },
    ALBControllerCertificate,
    False,
    None))



class ALBControllerCertificateCsr(VapiStruct):
    """
    CSR for Advanced Load Balancer Controller portal certificate

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



    _canonical_to_pep_names = {
                            'algorithm': 'algorithm',
                            'clustering_id': 'clustering_id',
                            'common_name': 'common_name',
                            'country': 'country',
                            'email': 'email',
                            'key_size': 'key_size',
                            'locality': 'locality',
                            'organization': 'organization',
                            'organization_unit': 'organization_unit',
                            'state_name': 'state_name',
                            'subject_alt_names': 'subject_alt_names',
                            }

    def __init__(self,
                 algorithm=None,
                 clustering_id=None,
                 common_name=None,
                 country=None,
                 email=None,
                 key_size=None,
                 locality=None,
                 organization=None,
                 organization_unit=None,
                 state_name=None,
                 subject_alt_names=None,
                ):
        """
        :type  algorithm: :class:`str` or ``None``
        :param algorithm: Algorithm for Advanced Load Balancer Controller portal certificate.
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  common_name: :class:`str` or ``None``
        :param common_name: Common name for Advanced Load Balancer Controller portal
            certificate.
        :type  country: :class:`str` or ``None``
        :param country: Country name for Advanced Load Balancer Controller portal
            certificate.
        :type  email: :class:`str` or ``None``
        :param email: Email for Advanced Load Balancer Controller portal certificate.
        :type  key_size: :class:`str` or ``None``
        :param key_size: Key size for Advanced Load Balancer Controller portal certificate.
        :type  locality: :class:`str` or ``None``
        :param locality: Location or region for Advanced Load Balancer Controller portal
            certificate.
        :type  organization: :class:`str` or ``None``
        :param organization: Organization for Advanced Load Balancer Controller portal
            certificate.
        :type  organization_unit: :class:`str` or ``None``
        :param organization_unit: Organization unit for Advanced Load Balancer Controller portal
            certificate.
        :type  state_name: :class:`str` or ``None``
        :param state_name: State name for Advanced Load Balancer Controller portal
            certificate.
        :type  subject_alt_names: :class:`list` of :class:`str` or ``None``
        :param subject_alt_names: List of SAN for Advanced Load Balancer Controller portal
            certificate.
        """
        self.algorithm = algorithm
        self.clustering_id = clustering_id
        self.common_name = common_name
        self.country = country
        self.email = email
        self.key_size = key_size
        self.locality = locality
        self.organization = organization
        self.organization_unit = organization_unit
        self.state_name = state_name
        self.subject_alt_names = subject_alt_names
        VapiStruct.__init__(self)


ALBControllerCertificateCsr._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_certificate_csr', {
        'algorithm': type.OptionalType(type.StringType()),
        'clustering_id': type.OptionalType(type.StringType()),
        'common_name': type.OptionalType(type.StringType()),
        'country': type.OptionalType(type.StringType()),
        'email': type.OptionalType(type.StringType()),
        'key_size': type.OptionalType(type.StringType()),
        'locality': type.OptionalType(type.StringType()),
        'organization': type.OptionalType(type.StringType()),
        'organization_unit': type.OptionalType(type.StringType()),
        'state_name': type.OptionalType(type.StringType()),
        'subject_alt_names': type.OptionalType(type.ListType(type.StringType())),
    },
    ALBControllerCertificateCsr,
    False,
    None))



class ALBControllerClusterInfo(VapiStruct):
    """
    Advanced Load Balancer controller cluster information about nodes in the
    cluster and cluster information.

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



    _canonical_to_pep_names = {
                            'cluster_name': 'cluster_name',
                            'cluster_state': 'cluster_state',
                            'cluster_uuid': 'cluster_uuid',
                            'clustering_id': 'clustering_id',
                            'error': 'error',
                            'nodes': 'nodes',
                            'reason': 'reason',
                            'version': 'version',
                            'virtual_ip': 'virtual_ip',
                            }

    def __init__(self,
                 cluster_name=None,
                 cluster_state=None,
                 cluster_uuid=None,
                 clustering_id=None,
                 error=None,
                 nodes=None,
                 reason=None,
                 version=None,
                 virtual_ip=None,
                ):
        """
        :type  cluster_name: :class:`str` or ``None``
        :param cluster_name: Advanced Load Balancer controller cluster 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  cluster_state: :class:`str` or ``None``
        :param cluster_state: Advanced Load Balancer controller cluster 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  cluster_uuid: :class:`str` or ``None``
        :param cluster_uuid: ID of the Cluster maintained internally. Note: This is
            automatically generated and cannot be modified.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  error: :class:`AlbControllerClusterRuntimeError` or ``None``
        :param error: 
        :type  nodes: :class:`list` of :class:`ALBControllerNodeInfo` or ``None``
        :param nodes: Advanced Load Balancer controller node information
        :type  reason: :class:`str` or ``None``
        :param reason: Advanced Load Balancer cluster state not STABLE reason.
            This 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: Advanced Load Balancer controller cluster 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  virtual_ip: :class:`str` or ``None``
        :param virtual_ip: Advanced Load Balancer controller cluster virtual_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.cluster_name = cluster_name
        self.cluster_state = cluster_state
        self.cluster_uuid = cluster_uuid
        self.clustering_id = clustering_id
        self.error = error
        self.nodes = nodes
        self.reason = reason
        self.version = version
        self.virtual_ip = virtual_ip
        VapiStruct.__init__(self)


ALBControllerClusterInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_cluster_info', {
        'cluster_name': type.OptionalType(type.StringType()),
        'cluster_state': type.OptionalType(type.StringType()),
        'cluster_uuid': type.OptionalType(type.StringType()),
        'clustering_id': type.OptionalType(type.StringType()),
        'error': type.OptionalType(type.ReferenceType(__name__, 'AlbControllerClusterRuntimeError')),
        'nodes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ALBControllerNodeInfo'))),
        'reason': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
        'virtual_ip': type.OptionalType(type.StringType()),
    },
    ALBControllerClusterInfo,
    False,
    None))



class ALBControllerClusterTrigger(VapiStruct):
    """
    Advanced Load Balancer controller node clustering trigger response.

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



    _canonical_to_pep_names = {
                            'status': 'status',
                            }

    def __init__(self,
                 status=None,
                ):
        """
        :type  status: :class:`str` or ``None``
        :param status: Advanced Load Balancer controller node clustering trigger 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.status = status
        VapiStruct.__init__(self)


ALBControllerClusterTrigger._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_cluster_trigger', {
        'status': type.OptionalType(type.StringType()),
    },
    ALBControllerClusterTrigger,
    False,
    None))



class ALBControllerConfiguration(VapiStruct):
    """
    Alb Controller config details

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


    """
    OWNED_BY_VCF = "VCF"
    """


    """



    _canonical_to_pep_names = {
                            'cluster_ip': 'cluster_ip',
                            'dns_servers': 'dns_servers',
                            'infra_admin_password': 'infra_admin_password',
                            'infra_admin_username': 'infra_admin_username',
                            'ntp_servers': 'ntp_servers',
                            'owned_by': 'owned_by',
                            }

    def __init__(self,
                 cluster_ip=None,
                 dns_servers=None,
                 infra_admin_password=None,
                 infra_admin_username=None,
                 ntp_servers=None,
                 owned_by=None,
                ):
        """
        :type  cluster_ip: :class:`str` or ``None``
        :param cluster_ip: The cluster IP of the Advanced Load Balancer controller node
            cluster. This is mandatory parameter and required for single node
            controller deployments as well. format: ip
        :type  dns_servers: :class:`list` of :class:`str` or ``None``
        :param dns_servers: List of DNS servers. format: ipv4
        :type  infra_admin_password: :class:`str` or ``None``
        :param infra_admin_password: Password for the controller node admin user. For deployment, this
            property is required. The password specified must be at least 8
            characters in length.
        :type  infra_admin_username: :class:`str` or ``None``
        :param infra_admin_username: Username for server authentication.
        :type  ntp_servers: :class:`list` of :class:`str` or ``None``
        :param ntp_servers: List of NTP servers. format: hostname-or-ipv4
        :type  owned_by: :class:`str` or ``None``
        :param owned_by: Possible values are: 
            
            * :attr:`ALBControllerConfiguration.OWNED_BY_LCM`
            * :attr:`ALBControllerConfiguration.OWNED_BY_VCF`
            
            OnBoarding workflow initiates by VCF/Others.
        """
        self.cluster_ip = cluster_ip
        self.dns_servers = dns_servers
        self.infra_admin_password = infra_admin_password
        self.infra_admin_username = infra_admin_username
        self.ntp_servers = ntp_servers
        self.owned_by = owned_by
        VapiStruct.__init__(self)


ALBControllerConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_configuration', {
        'cluster_ip': type.OptionalType(type.StringType()),
        'dns_servers': type.OptionalType(type.ListType(type.StringType())),
        'infra_admin_password': type.OptionalType(type.StringType()),
        'infra_admin_username': type.OptionalType(type.StringType()),
        'ntp_servers': type.OptionalType(type.ListType(type.StringType())),
        'owned_by': type.OptionalType(type.StringType()),
    },
    ALBControllerConfiguration,
    False,
    None))



class ALBControllerNodeFormFactor(VapiStruct):
    """
    Advanced Load Balancer node form factor.

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


    """
    TYPE_MEDIUM = "MEDIUM"
    """


    """
    TYPE_LARGE = "LARGE"
    """


    """



    _canonical_to_pep_names = {
                            'disk': 'disk',
                            'memory': 'memory',
                            'type': 'type',
                            'vcpu': 'vcpu',
                            }

    def __init__(self,
                 disk=None,
                 memory=None,
                 type=None,
                 vcpu=None,
                ):
        """
        :type  disk: :class:`long` or ``None``
        :param disk: Disk size of the Advanced Load Balancer controller node in 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  memory: :class:`long` or ``None``
        :param memory: Memory size of the Advanced Load Balancer controller node in 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  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`ALBControllerNodeFormFactor.TYPE_SMALL`
            * :attr:`ALBControllerNodeFormFactor.TYPE_MEDIUM`
            * :attr:`ALBControllerNodeFormFactor.TYPE_LARGE`
            
            Advanced Load Balancer controller node form factor 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  vcpu: :class:`long` or ``None``
        :param vcpu: Number of virtual cpus on the Advanced Load Balancer controller
            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.
        """
        self.disk = disk
        self.memory = memory
        self.type = type
        self.vcpu = vcpu
        VapiStruct.__init__(self)


ALBControllerNodeFormFactor._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_form_factor', {
        'disk': type.OptionalType(type.IntegerType()),
        'memory': type.OptionalType(type.IntegerType()),
        'type': type.OptionalType(type.StringType()),
        'vcpu': type.OptionalType(type.IntegerType()),
    },
    ALBControllerNodeFormFactor,
    False,
    None))



class ALBControllerNodeFormFactors(VapiStruct):
    """
    Advanced Load Balancer controller form factors list result

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



    _canonical_to_pep_names = {
                            'form_factors': 'form_factors',
                            }

    def __init__(self,
                 form_factors=None,
                ):
        """
        :type  form_factors: :class:`list` of :class:`ALBControllerNodeFormFactor` or ``None``
        :param form_factors: Advanced Load Balancer controller form factor list
        """
        self.form_factors = form_factors
        VapiStruct.__init__(self)


ALBControllerNodeFormFactors._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_form_factors', {
        'form_factors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ALBControllerNodeFormFactor'))),
    },
    ALBControllerNodeFormFactors,
    False,
    None))



class ALBControllerNodeInfo(VapiStruct):
    """
    Advanced Load Balancer controller node information like node IP and node
    name.

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



    _canonical_to_pep_names = {
                            'is_dhcp': 'is_dhcp',
                            'node_ip': 'node_ip',
                            'node_name': 'node_name',
                            'node_role': 'node_role',
                            'node_start_time': 'node_start_time',
                            'node_state': 'node_state',
                            'vm_id': 'vm_id',
                            }

    def __init__(self,
                 is_dhcp=None,
                 node_ip=None,
                 node_name=None,
                 node_role=None,
                 node_start_time=None,
                 node_state=None,
                 vm_id=None,
                ):
        """
        :type  is_dhcp: :class:`bool` or ``None``
        :param is_dhcp: Advanced Load Balancer controller node IP configuration is static
            or DHCP.
            This 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_ip: :class:`str` or ``None``
        :param node_ip: Advanced Load Balancer controller node 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.
        :type  node_name: :class:`str` or ``None``
        :param node_name: Advanced Load Balancer controller node 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  node_role: :class:`str` or ``None``
        :param node_role: Advanced Load Balancer controller node role in 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.
        :type  node_start_time: :class:`long` or ``None``
        :param node_start_time: Advanced Load Balancer controller node start time in its local
            timezone. format: int64
            This 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_state: :class:`str` or ``None``
        :param node_state: Advanced Load Balancer controller node current state in the
            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.
        :type  vm_id: :class:`str` or ``None``
        :param vm_id: ID of the VM maintained internally. Note: This is automatically
            generated and cannot be modified.
            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_dhcp = is_dhcp
        self.node_ip = node_ip
        self.node_name = node_name
        self.node_role = node_role
        self.node_start_time = node_start_time
        self.node_state = node_state
        self.vm_id = vm_id
        VapiStruct.__init__(self)


ALBControllerNodeInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_info', {
        'is_dhcp': type.OptionalType(type.BooleanType()),
        'node_ip': type.OptionalType(type.StringType()),
        'node_name': type.OptionalType(type.StringType()),
        'node_role': type.OptionalType(type.StringType()),
        'node_start_time': type.OptionalType(type.IntegerType()),
        'node_state': type.OptionalType(type.StringType()),
        'vm_id': type.OptionalType(type.StringType()),
    },
    ALBControllerNodeInfo,
    False,
    None))



class ALBControllerNodeUserSettings(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'admin_password': 'admin_password',
                            'admin_ssh_key': 'admin_ssh_key',
                            }

    def __init__(self,
                 admin_password=None,
                 admin_ssh_key=None,
                ):
        """
        :type  admin_password: :class:`str` or ``None``
        :param admin_password: Password for the controller node admin user. For deployment, this
            property is required. The password specified must be at least 8
            characters in length.
        :type  admin_ssh_key: :class:`str` or ``None``
        :param admin_ssh_key: To configure ssh into the Advanced Load Balancer controller, this
            property is required.
        """
        self.admin_password = admin_password
        self.admin_ssh_key = admin_ssh_key
        VapiStruct.__init__(self)


ALBControllerNodeUserSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_user_settings', {
        'admin_password': type.OptionalType(type.StringType()),
        'admin_ssh_key': type.OptionalType(type.StringType()),
    },
    ALBControllerNodeUserSettings,
    False,
    None))



class ALBControllerNodeVMClusterConfig(VapiStruct):
    """
    Contains the cluster configuration for a Advanced Load Balancer controller
    node VM 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',
                            'cluster_ip': 'cluster_ip',
                            'cluster_name': 'cluster_name',
                            'cluster_uuid': 'cluster_uuid',
                            'clustering_id': 'clustering_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,
                 cluster_ip=None,
                 cluster_name=None,
                 cluster_uuid=None,
                 clustering_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  cluster_ip: :class:`str` or ``None``
        :param cluster_ip: The cluster IP of the Advanced Load Balancer controller node
            cluster. This is mandatory parameter and required for single node
            controller deployments as well. format: ip
        :type  cluster_name: :class:`str` or ``None``
        :param cluster_name: The cluster name of the Advanced Load Balancer controller node
            cluster.
        :type  cluster_uuid: :class:`str` or ``None``
        :param cluster_uuid: ID of the Cluster maintained internally. This is different from
            cluster_uuid internal to Advanced Load Balancer controller. Note:
            This is automatically generated and cannot be modified.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.cluster_ip = cluster_ip
        self.cluster_name = cluster_name
        self.cluster_uuid = cluster_uuid
        self.clustering_id = clustering_id
        VapiStruct.__init__(self)


ALBControllerNodeVMClusterConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_VM_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'))),
        'cluster_ip': type.OptionalType(type.StringType()),
        'cluster_name': type.OptionalType(type.StringType()),
        'cluster_uuid': type.OptionalType(type.StringType()),
        'clustering_id': type.OptionalType(type.StringType()),
    },
    ALBControllerNodeVMClusterConfig,
    False,
    None))



class ALBControllerNodeVMDeploymentConfig(VapiStruct):
    """
    Contains info used to configure the VM on deployment.

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

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

    """
    PLACEMENT_TYPE_ALBCONTROLLERVSPHERECLUSTERNODEVMDEPLOYMENTCONFIG = "AlbControllerVsphereClusterNodeVmDeploymentConfig"
    """


    """



    _canonical_to_pep_names = {
                            'placement_type': 'placement_type',
                            }

    def __init__(self,
                 placement_type='ALBControllerNodeVMDeploymentConfig',
                ):
        """
        :type  placement_type: :class:`str`
        :param placement_type: Possible values are: 
            
            *
              :attr:`ALBControllerNodeVMDeploymentConfig.PLACEMENT_TYPE_ALBCONTROLLERVSPHERECLUSTERNODEVMDEPLOYMENTCONFIG`
            
            Specifies the config for the platform through which to deploy the
            VM.
        """
        self._placement_type = placement_type
        VapiStruct.__init__(self)

    @property
    def placement_type(self):
        """
        Return the discriminator value
        """
        return self._placement_type

ALBControllerNodeVMDeploymentConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_VM_deployment_config', {
        'placement_type': type.StringType(),
    },
    ALBControllerNodeVMDeploymentConfig,
    False,
    None))



class ALBControllerNodeVMDeploymentProgressState(VapiStruct):
    """
    Deployment progress state of Advanced Load Balancer controller VM. This
    Object contains name of current deployment step and overall progress
    percentage.

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



    _canonical_to_pep_names = {
                            'current_step_title': 'current_step_title',
                            'progress': 'progress',
                            }

    def __init__(self,
                 current_step_title=None,
                 progress=None,
                ):
        """
        :type  current_step_title: :class:`str` or ``None``
        :param current_step_title: Name of the current running step of 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  progress: :class:`long` or ``None``
        :param progress: Overall progress percentage of deployment completed format: int64
            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_step_title = current_step_title
        self.progress = progress
        VapiStruct.__init__(self)


ALBControllerNodeVMDeploymentProgressState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_VM_deployment_progress_state', {
        'current_step_title': type.OptionalType(type.StringType()),
        'progress': type.OptionalType(type.IntegerType()),
    },
    ALBControllerNodeVMDeploymentProgressState,
    False,
    None))



class ALBControllerNodeVMDeploymentRequest(VapiStruct):
    """
    Contains the deployment information for a Advanced Load Balancer controller
    node VM.

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


    """
    FORM_FACTOR_MEDIUM = "MEDIUM"
    """


    """
    FORM_FACTOR_LARGE = "LARGE"
    """


    """



    _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',
                            'clustering_id': 'clustering_id',
                            'deployment_config': 'deployment_config',
                            'form_factor': 'form_factor',
                            'sddc_manager': 'sddc_manager',
                            'user_settings': 'user_settings',
                            'vm_id': 'vm_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,
                 clustering_id=None,
                 deployment_config=None,
                 form_factor=None,
                 sddc_manager=None,
                 user_settings=None,
                 vm_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  deployment_config: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param deployment_config: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ALBControllerNodeVMDeploymentConfig`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`ALBControllerNodeVMDeploymentConfig`.
        :type  form_factor: :class:`str` or ``None``
        :param form_factor: Possible values are: 
            
            * :attr:`ALBControllerNodeVMDeploymentRequest.FORM_FACTOR_SMALL`
            * :attr:`ALBControllerNodeVMDeploymentRequest.FORM_FACTOR_MEDIUM`
            * :attr:`ALBControllerNodeVMDeploymentRequest.FORM_FACTOR_LARGE`
            
            Specifies the desired \"size\" of the VM
        :type  sddc_manager: :class:`str` or ``None``
        :param sddc_manager: FQDN or IP of SDDC Manager for VCF workflow format:
            hostname-or-ipv4
        :type  user_settings: :class:`ALBControllerNodeUserSettings` or ``None``
        :param user_settings: 
        :type  vm_id: :class:`str` or ``None``
        :param vm_id: ID of the VM maintained internally. Note: This is automatically
            generated and cannot be modified.
            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.clustering_id = clustering_id
        self.deployment_config = deployment_config
        self.form_factor = form_factor
        self.sddc_manager = sddc_manager
        self.user_settings = user_settings
        self.vm_id = vm_id
        VapiStruct.__init__(self)


ALBControllerNodeVMDeploymentRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_VM_deployment_request', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'clustering_id': type.OptionalType(type.StringType()),
        'deployment_config': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ALBControllerNodeVMDeploymentConfig')])),
        'form_factor': type.OptionalType(type.StringType()),
        'sddc_manager': type.OptionalType(type.StringType()),
        'user_settings': type.OptionalType(type.ReferenceType(__name__, 'ALBControllerNodeUserSettings')),
        'vm_id': type.OptionalType(type.StringType()),
    },
    ALBControllerNodeVMDeploymentRequest,
    False,
    None))



class ALBControllerNodeVMDeploymentRequestList(VapiStruct):
    """
    List of Advanced Load Balancer Controller Deployment Requests.

    .. 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',
                            'clustering_id': 'clustering_id',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 clustering_id=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_: 
        :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  clustering_id: :class:`str` or ``None``
        :param clustering_id: Id to filter NSX Advanced Load Balancer Controllers, if not
            provided NSX ALB Controllers without clustering Id will be
            returned.
        :type  results: :class:`list` of :class:`ALBControllerNodeVMDeploymentRequest` or ``None``
        :param results: Array of existing Advanced Load Balancer Controller Deployment
            Requests.
        """
        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.clustering_id = clustering_id
        self.results = results
        VapiStruct.__init__(self)


ALBControllerNodeVMDeploymentRequestList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_VM_deployment_request_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()),
        'clustering_id': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ALBControllerNodeVMDeploymentRequest'))),
    },
    ALBControllerNodeVMDeploymentRequestList,
    False,
    None))



class ALBControllerNodeVMDeploymentStatusReport(VapiStruct):
    """
    Contains up-to-date information relating to an auto-deployed VM, including
    its status and (potentially) an error message.

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


    """
    STATUS_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATUS_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATUS_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATUS_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    STATUS_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATUS_VM_POWER_ON_SUCCESSFUL = "VM_POWER_ON_SUCCESSFUL"
    """


    """
    STATUS_VM_REGISTRATION_IN_PROGRESS = "VM_REGISTRATION_IN_PROGRESS"
    """


    """
    STATUS_VM_REGISTRATION_SUCCESSFUL = "VM_REGISTRATION_SUCCESSFUL"
    """


    """
    STATUS_VM_REGISTRATION_FAILED = "VM_REGISTRATION_FAILED"
    """


    """
    STATUS_VM_WAITING_TO_COME_ONLINE = "VM_WAITING_TO_COME_ONLINE"
    """


    """
    STATUS_VM_ONLINE_FAILED = "VM_ONLINE_FAILED"
    """


    """
    STATUS_VM_CONFIGURATION_IN_PROGRESS = "VM_CONFIGURATION_IN_PROGRESS"
    """


    """
    STATUS_VM_CONFIGURATION_SUCCESSFUL = "VM_CONFIGURATION_SUCCESSFUL"
    """


    """
    STATUS_VM_CONFIGURATION_FAILED = "VM_CONFIGURATION_FAILED"
    """


    """
    STATUS_VM_CLUSTERING_QUEUED = "VM_CLUSTERING_QUEUED"
    """


    """
    STATUS_VM_CLUSTERING_IN_PROGRESS = "VM_CLUSTERING_IN_PROGRESS"
    """


    """
    STATUS_VM_CLUSTERING_SUCCESSFUL = "VM_CLUSTERING_SUCCESSFUL"
    """


    """
    STATUS_VM_CLUSTERING_FAILED = "VM_CLUSTERING_FAILED"
    """


    """
    STATUS_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    STATUS_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATUS_WAITING_TO_UNDEPLOY_VM = "WAITING_TO_UNDEPLOY_VM"
    """


    """
    STATUS_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATUS_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATUS_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATUS_UNKNOWN_STATE = "UNKNOWN_STATE"
    """


    """



    _canonical_to_pep_names = {
                            'deployment_progress_state': 'deployment_progress_state',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'status': 'status',
                            }

    def __init__(self,
                 deployment_progress_state=None,
                 failure_code=None,
                 failure_message=None,
                 status=None,
                ):
        """
        :type  deployment_progress_state: :class:`ALBControllerNodeVMDeploymentProgressState` or ``None``
        :param deployment_progress_state: 
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: In case of auto-deployment-related failure, the code for the error
            will be stored here. format: int64
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: In case of auto-deployment-related failure, an error message will
            be stored here.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_NOT_AVAILABLE`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_DEPLOYMENT_QUEUED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_DEPLOYMENT_IN_PROGRESS`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_DEPLOYMENT_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_POWER_ON_IN_PROGRESS`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_POWER_ON_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_POWER_ON_SUCCESSFUL`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_REGISTRATION_IN_PROGRESS`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_REGISTRATION_SUCCESSFUL`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_REGISTRATION_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_WAITING_TO_COME_ONLINE`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_ONLINE_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_CONFIGURATION_IN_PROGRESS`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_CONFIGURATION_SUCCESSFUL`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_CONFIGURATION_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_CLUSTERING_QUEUED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_CLUSTERING_IN_PROGRESS`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_CLUSTERING_SUCCESSFUL`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_CLUSTERING_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_POWER_OFF_IN_PROGRESS`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_POWER_OFF_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_WAITING_TO_UNDEPLOY_VM`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_UNDEPLOY_IN_PROGRESS`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_UNDEPLOY_FAILED`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_VM_UNDEPLOY_SUCCESSFUL`
            *
              :attr:`ALBControllerNodeVMDeploymentStatusReport.STATUS_UNKNOWN_STATE`
            
            Status of the addition or deletion of an auto-deployed Advanced
            Load Balancer controller node VM.
        """
        self.deployment_progress_state = deployment_progress_state
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.status = status
        VapiStruct.__init__(self)


ALBControllerNodeVMDeploymentStatusReport._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_node_VM_deployment_status_report', {
        'deployment_progress_state': type.OptionalType(type.ReferenceType(__name__, 'ALBControllerNodeVMDeploymentProgressState')),
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    ALBControllerNodeVMDeploymentStatusReport,
    False,
    None))



class ALBControllerSystemConfiguration(VapiStruct):
    """
    Advanced Load Balancer Controller System Configuration

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



    _canonical_to_pep_names = {
                            'backup_server_config': 'backup_server_config',
                            'clustering_id': 'clustering_id',
                            'dns_servers': 'dns_servers',
                            'ntp_servers': 'ntp_servers',
                            }

    def __init__(self,
                 backup_server_config=None,
                 clustering_id=None,
                 dns_servers=None,
                 ntp_servers=None,
                ):
        """
        :type  backup_server_config: :class:`ALBControllerBackupConfiguration` or ``None``
        :param backup_server_config: 
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  dns_servers: :class:`list` of :class:`str` or ``None``
        :param dns_servers: List of DNS servers. format: ipv4
        :type  ntp_servers: :class:`list` of :class:`str` or ``None``
        :param ntp_servers: List of NTP servers. format: hostname-or-ipv4
        """
        self.backup_server_config = backup_server_config
        self.clustering_id = clustering_id
        self.dns_servers = dns_servers
        self.ntp_servers = ntp_servers
        VapiStruct.__init__(self)


ALBControllerSystemConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_system_configuration', {
        'backup_server_config': type.OptionalType(type.ReferenceType(__name__, 'ALBControllerBackupConfiguration')),
        'clustering_id': type.OptionalType(type.StringType()),
        'dns_servers': type.OptionalType(type.ListType(type.StringType())),
        'ntp_servers': type.OptionalType(type.ListType(type.StringType())),
    },
    ALBControllerSystemConfiguration,
    False,
    None))



class ALBControllerSystemConfigurationResponse(VapiStruct):
    """
    Advanced Load Balancer controller node system configuration update
    response.

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



    _canonical_to_pep_names = {
                            'status': 'status',
                            }

    def __init__(self,
                 status=None,
                ):
        """
        :type  status: :class:`str` or ``None``
        :param status: Advanced Load Balancer controller node system configuration update
            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.status = status
        VapiStruct.__init__(self)


ALBControllerSystemConfigurationResponse._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_system_configuration_response', {
        'status': type.OptionalType(type.StringType()),
    },
    ALBControllerSystemConfigurationResponse,
    False,
    None))



class ALBControllerUserCredential(VapiStruct):
    """
    Advanced Load Balancer Controller service user credential.

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


    """
    USER_CREDENTIAL_TYPE_VCENTER_SERVICE_USER_CREDENTIAL = "VCENTER_SERVICE_USER_CREDENTIAL"
    """


    """
    USER_CREDENTIAL_TYPE_NSX_SERVICE_USER_CREDENTIAL = "NSX_SERVICE_USER_CREDENTIAL"
    """


    """



    _canonical_to_pep_names = {
                            'clustering_id': 'clustering_id',
                            'password': 'password',
                            'user_credential_type': 'user_credential_type',
                            'username': 'username',
                            }

    def __init__(self,
                 clustering_id=None,
                 password=None,
                 user_credential_type=None,
                 username=None,
                ):
        """
        :type  clustering_id: :class:`str` or ``None``
        :param clustering_id: Unique Id for NSX Advanced Load Balancer Controller Cluster used in
            VCF managed 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  password: :class:`str` or ``None``
        :param password: Password for the user credential object.
        :type  user_credential_type: :class:`str` or ``None``
        :param user_credential_type: Possible values are: 
            
            *
              :attr:`ALBControllerUserCredential.USER_CREDENTIAL_TYPE_CONTROLLER_ADMIN_USER_CREDENTIAL`
            *
              :attr:`ALBControllerUserCredential.USER_CREDENTIAL_TYPE_VCENTER_SERVICE_USER_CREDENTIAL`
            *
              :attr:`ALBControllerUserCredential.USER_CREDENTIAL_TYPE_NSX_SERVICE_USER_CREDENTIAL`
            
            Type of user credential.
        :type  username: :class:`str` or ``None``
        :param username: Username for the credential object.
        """
        self.clustering_id = clustering_id
        self.password = password
        self.user_credential_type = user_credential_type
        self.username = username
        VapiStruct.__init__(self)


ALBControllerUserCredential._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_user_credential', {
        'clustering_id': type.OptionalType(type.StringType()),
        'password': type.OptionalType(type.StringType()),
        'user_credential_type': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    ALBControllerUserCredential,
    False,
    None))



class ALBControllerUserCredentialResponse(VapiStruct):
    """
    Advanced Load Balancer Controller service user credential response

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


    """
    USER_CREDENTIAL_TYPE_VCENTER_SERVICE_USER_CREDENTIAL = "VCENTER_SERVICE_USER_CREDENTIAL"
    """


    """
    USER_CREDENTIAL_TYPE_NSX_SERVICE_USER_CREDENTIAL = "NSX_SERVICE_USER_CREDENTIAL"
    """


    """



    _canonical_to_pep_names = {
                            'user_credential_type': 'user_credential_type',
                            'username': 'username',
                            }

    def __init__(self,
                 user_credential_type=None,
                 username=None,
                ):
        """
        :type  user_credential_type: :class:`str` or ``None``
        :param user_credential_type: Possible values are: 
            
            *
              :attr:`ALBControllerUserCredentialResponse.USER_CREDENTIAL_TYPE_CONTROLLER_ADMIN_USER_CREDENTIAL`
            *
              :attr:`ALBControllerUserCredentialResponse.USER_CREDENTIAL_TYPE_VCENTER_SERVICE_USER_CREDENTIAL`
            *
              :attr:`ALBControllerUserCredentialResponse.USER_CREDENTIAL_TYPE_NSX_SERVICE_USER_CREDENTIAL`
            
            Type of user credential.
        :type  username: :class:`str` or ``None``
        :param username: Username for the user credential object.
        """
        self.user_credential_type = user_credential_type
        self.username = username
        VapiStruct.__init__(self)


ALBControllerUserCredentialResponse._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALB_controller_user_credential_response', {
        'user_credential_type': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    ALBControllerUserCredentialResponse,
    False,
    None))



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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 - Whitelisting with logging enabled
            BLACKLIST_ENABLE_LOGGING - Blacklisting with logging enabled NONE -
            No default rules are added.

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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',
                            'ipv6_address': 'ipv6_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,
                 ipv6_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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
        :type  ipv6_address: :class:`str` or ``None``
        :param ipv6_address: IPv6 address of the current node 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
        self.ipv6_address = ipv6_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()),
        'ipv6_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_: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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 AddALBControllerNodeVMInfo(VapiStruct):
    """
    Contains a list of Advanced Load Balancer controller node VM deployment
    requests.

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



    _canonical_to_pep_names = {
                            'deployment_requests': 'deployment_requests',
                            }

    def __init__(self,
                 deployment_requests=None,
                ):
        """
        :type  deployment_requests: :class:`list` of :class:`ALBControllerNodeVMDeploymentRequest` or ``None``
        :param deployment_requests: Advanced Load Balancer Controller deployment requests to be
            deployed by NSX.
        """
        self.deployment_requests = deployment_requests
        VapiStruct.__init__(self)


AddALBControllerNodeVMInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.add_ALB_controller_node_VM_info', {
        'deployment_requests': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ALBControllerNodeVMDeploymentRequest'))),
    },
    AddALBControllerNodeVMInfo,
    False,
    None))



class AddressBindingEntry(VapiStruct):
    """
    An address binding entry is a combination of the IP-MAC-VLAN binding for a
    logical port. The address bindings can be obtained via various methods like
    ARP snooping, DHCP snooping etc. or by user configuration.

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


    """
    SOURCE_UNKNOWN = "UNKNOWN"
    """


    """
    SOURCE_USER_DEFINED = "USER_DEFINED"
    """


    """
    SOURCE_ARP_SNOOPING = "ARP_SNOOPING"
    """


    """
    SOURCE_DHCP_SNOOPING = "DHCP_SNOOPING"
    """


    """
    SOURCE_VM_TOOLS = "VM_TOOLS"
    """


    """
    SOURCE_ND_SNOOPING = "ND_SNOOPING"
    """


    """
    SOURCE_DHCPV6_SNOOPING = "DHCPV6_SNOOPING"
    """


    """
    SOURCE_VM_TOOLS_V6 = "VM_TOOLS_V6"
    """


    """



    _canonical_to_pep_names = {
                            'binding': 'binding',
                            'binding_timestamp': 'binding_timestamp',
                            'source': 'source',
                            }

    def __init__(self,
                 binding=None,
                 binding_timestamp=None,
                 source=None,
                ):
        """
        :type  binding: :class:`PacketAddressClassifier` or ``None``
        :param binding: 
        :type  binding_timestamp: :class:`long` or ``None``
        :param binding_timestamp: Timestamp at which the binding was discovered via snooping or
            manually specified by the user format: int64
        :type  source: :class:`str` or ``None``
        :param source: Possible values are: 
            
            * :attr:`AddressBindingEntry.SOURCE_INVALID`
            * :attr:`AddressBindingEntry.SOURCE_UNKNOWN`
            * :attr:`AddressBindingEntry.SOURCE_USER_DEFINED`
            * :attr:`AddressBindingEntry.SOURCE_ARP_SNOOPING`
            * :attr:`AddressBindingEntry.SOURCE_DHCP_SNOOPING`
            * :attr:`AddressBindingEntry.SOURCE_VM_TOOLS`
            * :attr:`AddressBindingEntry.SOURCE_ND_SNOOPING`
            * :attr:`AddressBindingEntry.SOURCE_DHCPV6_SNOOPING`
            * :attr:`AddressBindingEntry.SOURCE_VM_TOOLS_V6`
            
            Source from which the address binding entry was obtained
        """
        self.binding = binding
        self.binding_timestamp = binding_timestamp
        self.source = source
        VapiStruct.__init__(self)


AddressBindingEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.address_binding_entry', {
        'binding': type.OptionalType(type.ReferenceType(__name__, 'PacketAddressClassifier')),
        'binding_timestamp': type.OptionalType(type.IntegerType()),
        'source': type.OptionalType(type.StringType()),
    },
    AddressBindingEntry,
    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 AdvanceServiceConfig(VapiStruct):
    """
    Contain optional configuration for deployment.

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



    _canonical_to_pep_names = {
                            'kubectl_tool': 'kubectl_tool',
                            'messaging_service_name': 'messaging_service_name',
                            'service_name': 'service_name',
                            }

    def __init__(self,
                 kubectl_tool=None,
                 messaging_service_name=None,
                 service_name=None,
                ):
        """
        :type  kubectl_tool: :class:`str` or ``None``
        :param kubectl_tool: Filename of uploaded Kubernetes tools
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  messaging_service_name: :class:`str` or ``None``
        :param messaging_service_name: FQDN to access kafka messaging service pod.
        :type  service_name: :class:`str` or ``None``
        :param service_name: FQDN to access deployment pod.
        """
        self.kubectl_tool = kubectl_tool
        self.messaging_service_name = messaging_service_name
        self.service_name = service_name
        VapiStruct.__init__(self)


AdvanceServiceConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.advance_service_config', {
        'kubectl_tool': type.OptionalType(type.StringType()),
        'messaging_service_name': type.OptionalType(type.StringType()),
        'service_name': type.OptionalType(type.StringType()),
    },
    AdvanceServiceConfig,
    False,
    None))



class AdvancedConfig(VapiStruct):
    """
    These are advanced configuration options.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "AdvancedConfig"
    """
    Identifier denoting this class, when it is used 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 = {
                            'high_performance_config_params': 'high_performance_config_params',
                            'high_performance_config_type': 'high_performance_config_type',
                            'version': 'version',
                            }

    def __init__(self,
                 high_performance_config_params=None,
                 high_performance_config_type='AdvancedConfig',
                 version=None,
                ):
        """
        :type  high_performance_config_params: :class:`list` of :class:`HighPerformanceConfigParams` or ``None``
        :param high_performance_config_params: List of parameters that could be used to configure high
            performance.
        :type  high_performance_config_type: :class:`str`
        :param high_performance_config_type: Possible values are: 
            
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_ADV_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_DRIVER_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_MISC_CONFIG`
            
            The specific type of config.
        :type  version: :class:`list` of :class:`str` or ``None``
        :param version: Based on the high_performance_config_type, it could be either
            driver version or host version. For high_performance_config_type as
            ADV_CONFIG or MISC_CONFIG, this represents host version. For
            high_performance_config_type as DRIVER_CONFIG, this represents
            physical NIC driver version.
        """
        self.high_performance_config_params = high_performance_config_params
        self._high_performance_config_type = high_performance_config_type
        self.version = version
        VapiStruct.__init__(self)

    @property
    def high_performance_config_type(self):
        """
        Return the discriminator value
        """
        return self._high_performance_config_type

AdvancedConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.advanced_config', {
        'high_performance_config_params': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HighPerformanceConfigParams'))),
        'high_performance_config_type': type.StringType(),
        'version': type.OptionalType(type.ListType(type.StringType())),
    },
    AdvancedConfig,
    False,
    None))



class AdvertisedNetworkCsvRecord(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'network': 'network',
                            'rule_filter_type': 'rule_filter_type',
                            'status': 'status',
                            }

    def __init__(self,
                 network=None,
                 rule_filter_type=None,
                 status=None,
                ):
        """
        :type  network: :class:`str` or ``None``
        :param network: Advertised network 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  rule_filter_type: :class:`str` or ``None``
        :param rule_filter_type: Advertised rule filter 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  status: :class:`str` or ``None``
        :param status: advertisement status of network to connected gateway SUCCESS -
            network route successfully plumbed on target gateway
            DENIED_BY_TARGET_GATEWAY - network denied by target gateway because
            of in filter rules or missing inter vrf config
            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.network = network
        self.rule_filter_type = rule_filter_type
        self.status = status
        VapiStruct.__init__(self)


AdvertisedNetworkCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.advertised_network_csv_record', {
        'network': type.OptionalType(type.StringType()),
        'rule_filter_type': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    AdvertisedNetworkCsvRecord,
    False,
    None))



class AgentStatus(VapiStruct):
    """


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


    """
    NAME_OPSAGENT = "NSX_OPSAGENT"
    """


    """
    NAME_CFGAGENT = "NSX_CFGAGENT"
    """


    """
    NAME_NESTDB = "NSX_NESTDB"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'components': 'components',
                            'last_status_changed_time': 'last_status_changed_time',
                            'name': 'name',
                            'status': 'status',
                            'status_description': 'status_description',
                            }

    def __init__(self,
                 components=None,
                 last_status_changed_time=None,
                 name=None,
                 status=None,
                 status_description=None,
                ):
        """
        :type  components: :class:`list` of :class:`AgentSubStatus` or ``None``
        :param components: List of agent subcomponent statuses
        :type  last_status_changed_time: :class:`long` or ``None``
        :param last_status_changed_time: Timestamp of the last status change, in epoch milliseconds format:
            int64
        :type  name: :class:`str` or ``None``
        :param name: Possible values are: 
            
            * :attr:`AgentStatus.NAME_AGENT`
            * :attr:`AgentStatus.NAME_OPSAGENT`
            * :attr:`AgentStatus.NAME_CFGAGENT`
            * :attr:`AgentStatus.NAME_NESTDB`
            
            Agent name
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`AgentStatus.STATUS_UP`
            * :attr:`AgentStatus.STATUS_DOWN`
            * :attr:`AgentStatus.STATUS_UNKNOWN`
            * :attr:`AgentStatus.STATUS_DEGRADED`
            
            Agent status
        :type  status_description: :class:`str` or ``None``
        :param status_description: Describe what makes the status not UP
        """
        self.components = components
        self.last_status_changed_time = last_status_changed_time
        self.name = name
        self.status = status
        self.status_description = status_description
        VapiStruct.__init__(self)


AgentStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.agent_status', {
        'components': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AgentSubStatus'))),
        'last_status_changed_time': type.OptionalType(type.IntegerType()),
        'name': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'status_description': type.OptionalType(type.StringType()),
    },
    AgentStatus,
    False,
    None))



class AgentStatusCount(VapiStruct):
    """


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


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'agents': 'agents',
                            'degraded_count': 'degraded_count',
                            'down_count': 'down_count',
                            'last_status_changed_time': 'last_status_changed_time',
                            'smartnic_agents': 'smartnic_agents',
                            'status': 'status',
                            'up_count': 'up_count',
                            }

    def __init__(self,
                 agents=None,
                 degraded_count=None,
                 down_count=None,
                 last_status_changed_time=None,
                 smartnic_agents=None,
                 status=None,
                 up_count=None,
                ):
        """
        :type  agents: :class:`list` of :class:`AgentStatus` or ``None``
        :param agents: List of agent statuses belonging to the transport node
        :type  degraded_count: :class:`long` or ``None``
        :param degraded_count: Degraded count format: int32
        :type  down_count: :class:`long` or ``None``
        :param down_count: Down count format: int32
        :type  last_status_changed_time: :class:`long` or ``None``
        :param last_status_changed_time: Timestamp of the last status change, in epoch milliseconds format:
            int64
        :type  smartnic_agents: :class:`list` of :class:`SmartnicAgentStatus` or ``None``
        :param smartnic_agents: List of Smartnic agent statuses
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`AgentStatusCount.STATUS_UP`
            * :attr:`AgentStatusCount.STATUS_DOWN`
            * :attr:`AgentStatusCount.STATUS_UNKNOWN`
            * :attr:`AgentStatusCount.STATUS_DEGRADED`
            
            Roll-up agent status
        :type  up_count: :class:`long` or ``None``
        :param up_count: Up count format: int32
        """
        self.agents = agents
        self.degraded_count = degraded_count
        self.down_count = down_count
        self.last_status_changed_time = last_status_changed_time
        self.smartnic_agents = smartnic_agents
        self.status = status
        self.up_count = up_count
        VapiStruct.__init__(self)


AgentStatusCount._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.agent_status_count', {
        'agents': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AgentStatus'))),
        'degraded_count': type.OptionalType(type.IntegerType()),
        'down_count': type.OptionalType(type.IntegerType()),
        'last_status_changed_time': type.OptionalType(type.IntegerType()),
        'smartnic_agents': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SmartnicAgentStatus'))),
        'status': type.OptionalType(type.StringType()),
        'up_count': type.OptionalType(type.IntegerType()),
    },
    AgentStatusCount,
    False,
    None))



class AgentSubStatus(VapiStruct):
    """


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


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'name': 'name',
                            'status': 'status',
                            'status_description': 'status_description',
                            }

    def __init__(self,
                 name=None,
                 status=None,
                 status_description=None,
                ):
        """
        :type  name: :class:`str` or ``None``
        :param name: Agent subcomponent name
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`AgentSubStatus.STATUS_UP`
            * :attr:`AgentSubStatus.STATUS_DOWN`
            * :attr:`AgentSubStatus.STATUS_UNKNOWN`
            
            Agent subcomponent status
        :type  status_description: :class:`str` or ``None``
        :param status_description: Describe what makes the status not UP
        """
        self.name = name
        self.status = status
        self.status_description = status_description
        VapiStruct.__init__(self)


AgentSubStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.agent_sub_status', {
        'name': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'status_description': type.OptionalType(type.StringType()),
    },
    AgentSubStatus,
    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 AggregateTunnelTrafficStatistics(VapiStruct):
    """
    Aggregate Tunnel Traffic Statistics object

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "AggregateTunnelTrafficStatistics"
    """
    Identifier denoting this class, when it is used 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_GRETUNNELAGGREGATETRAFFICSTATISTICS = "GreTunnelAggregateTrafficStatistics"
    """


    """



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

    def __init__(self,
                 resource_type='AggregateTunnelTrafficStatistics',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`AggregateTunnelTrafficStatistics.RESOURCE_TYPE_GRETUNNELAGGREGATETRAFFICSTATISTICS`
            
            GreTunnelAggregateTrafficStatistics - Resource type as
            GreTunnelAggregateTrafficStatistics will be used to populate P2P
            GRE Aggregate Tunnel traffic statistics
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

AggregateTunnelTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_tunnel_traffic_statistics', {
        'resource_type': type.StringType(),
    },
    AggregateTunnelTrafficStatistics,
    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_firewall_packets': 'dropped_by_firewall_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_firewall_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_firewall_packets: :class:`DfwDropCounters` or ``None``
        :param dropped_by_firewall_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_firewall_packets = dropped_by_firewall_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_firewall_packets': type.OptionalType(type.ReferenceType(__name__, 'DfwDropCounters')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'PacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'MacLearningCounters')),
    },
    AggregatedDataCounterEx,
    False,
    None))



class AggregatedFeatureDetailListResult(VapiStruct):
    """
    Paged Collection of AggregatedFeatureStateDetail

    .. 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_: 
        :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:`AggregatedFeatureStateDetails` or ``None``
        :param results: AggregatedFeatureStateDetail 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)


AggregatedFeatureDetailListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregated_feature_detail_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__, 'AggregatedFeatureStateDetails'))),
    },
    AggregatedFeatureDetailListResult,
    False,
    None))



class AggregatedFeatureListResult(VapiStruct):
    """
    Paged Collection of AggregatedFeatureState

    .. 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_: 
        :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:`AggregatedFeatureState` or ``None``
        :param results: AggregatedFeatureState 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)


AggregatedFeatureListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregated_feature_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__, 'AggregatedFeatureState'))),
    },
    AggregatedFeatureListResult,
    False,
    None))



class AggregatedFeatureState(VapiStruct):
    """
    Feature state aggregating both feature flag and license information

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


    """
    STATE_DISABLED_AND_UNLICENSED = "DISABLED_AND_UNLICENSED"
    """


    """
    STATE_ENABLED_ONLY = "ENABLED_ONLY"
    """


    """
    STATE_LICENSED_ONLY = "LICENSED_ONLY"
    """


    """
    STATE_ENABLED_AND_LICENSED = "ENABLED_AND_LICENSED"
    """


    """



    _canonical_to_pep_names = {
                            'feature_name': 'feature_name',
                            'state': 'state',
                            }

    def __init__(self,
                 feature_name=None,
                 state=None,
                ):
        """
        :type  feature_name: :class:`str` or ``None``
        :param feature_name: feature name
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`AggregatedFeatureState.STATE_INCOMPATIBLE`
            * :attr:`AggregatedFeatureState.STATE_DISABLED_AND_UNLICENSED`
            * :attr:`AggregatedFeatureState.STATE_ENABLED_ONLY`
            * :attr:`AggregatedFeatureState.STATE_LICENSED_ONLY`
            * :attr:`AggregatedFeatureState.STATE_ENABLED_AND_LICENSED`
            
            Aggregated feature state
        """
        self.feature_name = feature_name
        self.state = state
        VapiStruct.__init__(self)


AggregatedFeatureState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregated_feature_state', {
        'feature_name': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    AggregatedFeatureState,
    False,
    None))



class AggregatedFeatureStateDetails(VapiStruct):
    """
    Feature state aggregating both feature flag and license information
    including API details

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


    """
    STATE_DISABLED_AND_UNLICENSED = "DISABLED_AND_UNLICENSED"
    """


    """
    STATE_ENABLED_ONLY = "ENABLED_ONLY"
    """


    """
    STATE_LICENSED_ONLY = "LICENSED_ONLY"
    """


    """
    STATE_ENABLED_AND_LICENSED = "ENABLED_AND_LICENSED"
    """


    """



    _canonical_to_pep_names = {
                            'apis': 'apis',
                            'attributes': 'attributes',
                            'enum_values': 'enum_values',
                            'feature_name': 'feature_name',
                            'state': 'state',
                            }

    def __init__(self,
                 apis=None,
                 attributes=None,
                 enum_values=None,
                 feature_name=None,
                 state=None,
                ):
        """
        :type  apis: :class:`list` of :class:`str` or ``None``
        :param apis: The list of APIs included in the named feature
        :type  attributes: :class:`list` of :class:`str` or ``None``
        :param attributes: The list of DTO attributes included in the named feature
        :type  enum_values: :class:`list` of :class:`str` or ``None``
        :param enum_values: The list of DTO attribute enum values included in the named feature
        :type  feature_name: :class:`str` or ``None``
        :param feature_name: feature name
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`AggregatedFeatureStateDetails.STATE_INCOMPATIBLE`
            *
              :attr:`AggregatedFeatureStateDetails.STATE_DISABLED_AND_UNLICENSED`
            * :attr:`AggregatedFeatureStateDetails.STATE_ENABLED_ONLY`
            * :attr:`AggregatedFeatureStateDetails.STATE_LICENSED_ONLY`
            * :attr:`AggregatedFeatureStateDetails.STATE_ENABLED_AND_LICENSED`
            
            Aggregated feature state
        """
        self.apis = apis
        self.attributes = attributes
        self.enum_values = enum_values
        self.feature_name = feature_name
        self.state = state
        VapiStruct.__init__(self)


AggregatedFeatureStateDetails._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregated_feature_state_details', {
        'apis': type.OptionalType(type.ListType(type.StringType())),
        'attributes': type.OptionalType(type.ListType(type.StringType())),
        'enum_values': type.OptionalType(type.ListType(type.StringType())),
        'feature_name': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    AggregatedFeatureStateDetails,
    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 AlbControllerClusterRuntimeError(VapiStruct):
    """
    Advanced Load Balancer controller cluster runtime error.

    .. 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',
                            }

    def __init__(self,
                 error_code=None,
                 error_message=None,
                ):
        """
        :type  error_code: :class:`long` or ``None``
        :param error_code: Advanced Load Balancer cluster runtime error code. 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  error_message: :class:`str` or ``None``
        :param error_message: Advanced Load Balancer cluster runtime error msg.
            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
        VapiStruct.__init__(self)


AlbControllerClusterRuntimeError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.alb_controller_cluster_runtime_error', {
        'error_code': type.OptionalType(type.IntegerType()),
        'error_message': type.OptionalType(type.StringType()),
    },
    AlbControllerClusterRuntimeError,
    False,
    None))



class AlbControllerVsphereClusterNodeVmDeploymentConfig(VapiStruct):
    """
    The vSphere deployment configuration determines where to deploy the
    Advanced Load Balancer controller node VM through a vCenter server. It
    contains settings that are applied during install time. If using DHCP, the
    following fields must be left unset - management_port_subnets, and
    default_gateway_addresses

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

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

    """
    DISK_PROVISIONING_THIN = "THIN"
    """


    """
    DISK_PROVISIONING_LAZY_ZEROED_THICK = "LAZY_ZEROED_THICK"
    """


    """
    DISK_PROVISIONING_EAGER_ZEROED_THICK = "EAGER_ZEROED_THICK"
    """


    """



    _canonical_to_pep_names = {
                            'compute_id': 'compute_id',
                            'default_gateway_addresses': 'default_gateway_addresses',
                            'disk_provisioning': 'disk_provisioning',
                            'display_name': 'display_name',
                            'dns_servers': 'dns_servers',
                            'host_id': 'host_id',
                            'hostname': 'hostname',
                            'management_network_id': 'management_network_id',
                            'management_port_subnets': 'management_port_subnets',
                            'ntp_servers': 'ntp_servers',
                            'storage_id': 'storage_id',
                            'storage_policy_id': 'storage_policy_id',
                            'vc_id': 'vc_id',
                            'placement_type': 'placement_type',
                            }

    def __init__(self,
                 compute_id=None,
                 default_gateway_addresses=None,
                 disk_provisioning=None,
                 display_name=None,
                 dns_servers=None,
                 host_id=None,
                 hostname=None,
                 management_network_id=None,
                 management_port_subnets=None,
                 ntp_servers=None,
                 storage_id=None,
                 storage_policy_id=None,
                 vc_id=None,
                 placement_type='AlbControllerVsphereClusterNodeVmDeploymentConfig',
                ):
        """
        :type  compute_id: :class:`str` or ``None``
        :param compute_id: The Advanced Load Balancer controller node VM will be deployed on
            the specified cluster or resourcepool for specified VC server.
        :type  default_gateway_addresses: :class:`list` of :class:`str` or ``None``
        :param default_gateway_addresses: The default gateway for the VM to be deployed must be specified if
            all the other VMs it communicates with are not in the same subnet.
            Do not specify this field and management_port_subnets to use DHCP.
            Note: only single IPv4 default gateway address is supported and it
            must belong to management network. format: ip
        :type  disk_provisioning: :class:`str` or ``None``
        :param disk_provisioning: Possible values are: 
            
            *
              :attr:`AlbControllerVsphereClusterNodeVmDeploymentConfig.DISK_PROVISIONING_THIN`
            *
              :attr:`AlbControllerVsphereClusterNodeVmDeploymentConfig.DISK_PROVISIONING_LAZY_ZEROED_THICK`
            *
              :attr:`AlbControllerVsphereClusterNodeVmDeploymentConfig.DISK_PROVISIONING_EAGER_ZEROED_THICK`
            
            Specifies the disk provisioning type of the VM.
        :type  display_name: :class:`str` or ``None``
        :param display_name: Desired display name for Advanced Load Balancer controller VM to be
            deployed.
        :type  dns_servers: :class:`list` of :class:`str` or ``None``
        :param dns_servers: List of DNS servers. format: ipv4
        :type  host_id: :class:`str` or ``None``
        :param host_id: The Advanced Load Balancer controller node VM will be deployed on
            the specified host in the specified VC server within the cluster if
            host_id is specified. Note: User must ensure that storage and
            specified networks are accessible by this host.
        :type  hostname: :class:`str` or ``None``
        :param hostname: Desired host name/FQDN for the VM to be deployed. format:
            hostname-or-ip
        :type  management_network_id: :class:`str` or ``None``
        :param management_network_id: Distributed portgroup identifier to which the management vnic of
            Advanced Load Balancer controller node VM will be connected.
        :type  management_port_subnets: :class:`list` of :class:`IPSubnet` or ``None``
        :param management_port_subnets: IP Address and subnet configuration for the management port. Do not
            specify this field and default_gateway_addresses to use DHCP. Note:
            only one IPv4 address is supported for the management port.
        :type  ntp_servers: :class:`list` of :class:`str` or ``None``
        :param ntp_servers: List of NTP servers. format: hostname-or-ipv4
        :type  storage_id: :class:`str` or ``None``
        :param storage_id: The Advanced Load Balancer controller node VM will be deployed on
            the specified datastore in the specified VC server. User must
            ensure that storage is accessible by the specified cluster/host.
        :type  storage_policy_id: :class:`str` or ``None``
        :param storage_policy_id: The cluster node VM will be deployed with the specified storage
            policy on the specified datastore in the specified VC server. User
            must ensure that the storage policy is applicable on the given
            datastore.
        :type  vc_id: :class:`str` or ``None``
        :param vc_id: The VC-specific identifiers will be resolved on this VC, so all
            other identifiers specified in the config must belong to this
            vCenter server.
        :type  placement_type: :class:`str`
        :param placement_type: Possible values are: 
            
            *
              :attr:`ALBControllerNodeVMDeploymentConfig.PLACEMENT_TYPE_ALBCONTROLLERVSPHERECLUSTERNODEVMDEPLOYMENTCONFIG`
            
            Specifies the config for the platform through which to deploy the
            VM.
        """
        self.compute_id = compute_id
        self.default_gateway_addresses = default_gateway_addresses
        self.disk_provisioning = disk_provisioning
        self.display_name = display_name
        self.dns_servers = dns_servers
        self.host_id = host_id
        self.hostname = hostname
        self.management_network_id = management_network_id
        self.management_port_subnets = management_port_subnets
        self.ntp_servers = ntp_servers
        self.storage_id = storage_id
        self.storage_policy_id = storage_policy_id
        self.vc_id = vc_id
        self._placement_type = placement_type
        VapiStruct.__init__(self)

    @property
    def placement_type(self):
        """
        Return the discriminator value
        """
        return self._placement_type

AlbControllerVsphereClusterNodeVmDeploymentConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.alb_controller_vsphere_cluster_node_vm_deployment_config', {
        'compute_id': type.OptionalType(type.StringType()),
        'default_gateway_addresses': type.OptionalType(type.ListType(type.StringType())),
        'disk_provisioning': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'dns_servers': type.OptionalType(type.ListType(type.StringType())),
        'host_id': type.OptionalType(type.StringType()),
        'hostname': type.OptionalType(type.StringType()),
        'management_network_id': type.OptionalType(type.StringType()),
        'management_port_subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSubnet'))),
        'ntp_servers': type.OptionalType(type.ListType(type.StringType())),
        'storage_id': type.OptionalType(type.StringType()),
        'storage_policy_id': type.OptionalType(type.StringType()),
        'vc_id': type.OptionalType(type.StringType()),
        'placement_type': type.StringType(),
    },
    AlbControllerVsphereClusterNodeVmDeploymentConfig,
    False,
    None))



class AnalyticsMaintenanceMode(VapiStruct):
    """
    Set Analytics agents to maintenance mode during cluster changes.

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



    _canonical_to_pep_names = {
                            'agent_error_message': 'agent_error_message',
                            'enable': 'enable',
                            }

    def __init__(self,
                 agent_error_message=None,
                 enable=None,
                ):
        """
        :type  agent_error_message: :class:`str` or ``None``
        :param agent_error_message: string describing the error
        :type  enable: :class:`bool` or ``None``
        :param enable: Activate/deactivate maintenance mode
        """
        self.agent_error_message = agent_error_message
        self.enable = enable
        VapiStruct.__init__(self)


AnalyticsMaintenanceMode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.analytics_maintenance_mode', {
        'agent_error_message': type.OptionalType(type.StringType()),
        'enable': type.OptionalType(type.BooleanType()),
    },
    AnalyticsMaintenanceMode,
    False,
    None))



class AntreaAdapterStatus(VapiStruct):
    """
    Antrea adapter status

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


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'conditions': 'conditions',
                            'status': 'status',
                            }

    def __init__(self,
                 conditions=None,
                 status=None,
                ):
        """
        :type  conditions: :class:`list` of :class:`ComponentConditionItem` or ``None``
        :param conditions: Collection of adapter conditions.
            This 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:`AntreaAdapterStatus.STATUS_HEALTHY`
            * :attr:`AntreaAdapterStatus.STATUS_DEGRADED`
            * :attr:`AntreaAdapterStatus.STATUS_FAILED`
            * :attr:`AntreaAdapterStatus.STATUS_UNKNOWN`
            
            Indicate overall healthy 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.conditions = conditions
        self.status = status
        VapiStruct.__init__(self)


AntreaAdapterStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_adapter_status', {
        'conditions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ComponentConditionItem'))),
        'status': type.OptionalType(type.StringType()),
    },
    AntreaAdapterStatus,
    False,
    None))



class AntreaAgentsInfo(VapiStruct):
    """
    Antrea agents information

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



    _canonical_to_pep_names = {
                            'degraded_agent_num': 'degraded_agent_num',
                            'failed_agent_num': 'failed_agent_num',
                            'healthy_agent_num': 'healthy_agent_num',
                            }

    def __init__(self,
                 degraded_agent_num=None,
                 failed_agent_num=None,
                 healthy_agent_num=None,
                ):
        """
        :type  degraded_agent_num: :class:`long` or ``None``
        :param degraded_agent_num: The number of degraded agents 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  failed_agent_num: :class:`long` or ``None``
        :param failed_agent_num: The number of failed agents 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  healthy_agent_num: :class:`long` or ``None``
        :param healthy_agent_num: The number of healthy agents 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.degraded_agent_num = degraded_agent_num
        self.failed_agent_num = failed_agent_num
        self.healthy_agent_num = healthy_agent_num
        VapiStruct.__init__(self)


AntreaAgentsInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_agents_info', {
        'degraded_agent_num': type.OptionalType(type.IntegerType()),
        'failed_agent_num': type.OptionalType(type.IntegerType()),
        'healthy_agent_num': type.OptionalType(type.IntegerType()),
    },
    AntreaAgentsInfo,
    False,
    None))



class AntreaClusterInfo(VapiStruct):
    """
    Antrea cluster status info.

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


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'agent_info': 'agent_info',
                            'ccp_adapter_status': 'ccp_adapter_status',
                            'controller_status': 'controller_status',
                            'mp_adapter_status': 'mp_adapter_status',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 agent_info=None,
                 ccp_adapter_status=None,
                 controller_status=None,
                 mp_adapter_status=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  agent_info: :class:`AntreaAgentsInfo` or ``None``
        :param agent_info: 
        :type  ccp_adapter_status: :class:`AntreaAdapterStatus` or ``None``
        :param ccp_adapter_status: 
        :type  controller_status: :class:`AntreaControllerStatus` or ``None``
        :param controller_status: 
        :type  mp_adapter_status: :class:`AntreaAdapterStatus` or ``None``
        :param mp_adapter_status: 
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`AntreaClusterInfo.STATUS_HEALTHY`
            * :attr:`AntreaClusterInfo.STATUS_DEGRADED`
            * :attr:`AntreaClusterInfo.STATUS_FAILED`
            * :attr:`AntreaClusterInfo.STATUS_UNKNOWN`
            
            Roll-up status of components
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.agent_info = agent_info
        self.ccp_adapter_status = ccp_adapter_status
        self.controller_status = controller_status
        self.mp_adapter_status = mp_adapter_status
        self.status = status
        VapiStruct.__init__(self)


AntreaClusterInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_cluster_info', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'agent_info': type.OptionalType(type.ReferenceType(__name__, 'AntreaAgentsInfo')),
        'ccp_adapter_status': type.OptionalType(type.ReferenceType(__name__, 'AntreaAdapterStatus')),
        'controller_status': type.OptionalType(type.ReferenceType(__name__, 'AntreaControllerStatus')),
        'mp_adapter_status': type.OptionalType(type.ReferenceType(__name__, 'AntreaAdapterStatus')),
        'status': type.OptionalType(type.StringType()),
    },
    AntreaClusterInfo,
    False,
    None))



class AntreaClusterListResult(VapiStruct):
    """
    Paged list of Antrea Cluster 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_: 
        :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:`AntreaClusterInfo` or ``None``
        :param results: Antrea cluster 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)


AntreaClusterListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_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__, 'AntreaClusterInfo'))),
    },
    AntreaClusterListResult,
    False,
    None))



class AntreaControllerStatus(VapiStruct):
    """
    Antrea Controller status, including component status, connected agent and
    CONTROLLER_ prefix conditions status.

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


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'conditions': 'conditions',
                            'connected_agent_num': 'connected_agent_num',
                            'status': 'status',
                            }

    def __init__(self,
                 conditions=None,
                 connected_agent_num=None,
                 status=None,
                ):
        """
        :type  conditions: :class:`list` of :class:`ComponentConditionItem` or ``None``
        :param conditions: Collection of controller related conditions.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  connected_agent_num: :class:`long` or ``None``
        :param connected_agent_num: If status is UNKNOWN, this number is meaningless. 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  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`AntreaControllerStatus.STATUS_HEALTHY`
            * :attr:`AntreaControllerStatus.STATUS_DEGRADED`
            * :attr:`AntreaControllerStatus.STATUS_FAILED`
            * :attr:`AntreaControllerStatus.STATUS_UNKNOWN`
            
            Indicate overall healthy 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.conditions = conditions
        self.connected_agent_num = connected_agent_num
        self.status = status
        VapiStruct.__init__(self)


AntreaControllerStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_controller_status', {
        'conditions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ComponentConditionItem'))),
        'connected_agent_num': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
    },
    AntreaControllerStatus,
    False,
    None))



class AntreaHeartbeatConfig(VapiStruct):
    """
    Antrea heartbeat configuration for interval time.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'report_interval': 'report_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 report_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  report_interval: :class:`long` or ``None``
        :param report_interval: If exceeding 3\*report_interval, there is still no heartbeat,
            cluster status will be UNKNOWN. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.report_interval = report_interval
        VapiStruct.__init__(self)


AntreaHeartbeatConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_heartbeat_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'report_interval': type.OptionalType(type.IntegerType()),
    },
    AntreaHeartbeatConfig,
    False,
    None))



class AntreaHeartbeatConfigListResult(VapiStruct):
    """
    Paged list of Antrea Cluster heartbeat config.

    .. 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_: 
        :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:`AntreaHeartbeatConfig` or ``None``
        :param results: List of Antrea cluster heartbeat config.
        """
        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)


AntreaHeartbeatConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_heartbeat_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__, 'AntreaHeartbeatConfig'))),
    },
    AntreaHeartbeatConfigListResult,
    False,
    None))



class AntreaTraceflowConfig(VapiStruct):
    """
    The configuration for Antrea traceflow.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'container_cluster_id': 'container_cluster_id',
                            'destination_external_id': 'destination_external_id',
                            'is_transient': 'is_transient',
                            'packet': 'packet',
                            'source_external_id': 'source_external_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 container_cluster_id=None,
                 destination_external_id=None,
                 is_transient=None,
                 packet=None,
                 source_external_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  container_cluster_id: :class:`str` or ``None``
        :param container_cluster_id: Container cluster ID in inventory. This property is used to
            identify multiple clusters under single NSX-T.
        :type  destination_external_id: :class:`str` or ``None``
        :param destination_external_id: Destination external id for Antrea traceflow. Must be
            ContainerApplicationInstance or ContainerApplication. Ignored if
            destination_ip provided in packet data.
        :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:`AntreaTraceflowPacketData` or ``None``
        :param packet: 
        :type  source_external_id: :class:`str` or ``None``
        :param source_external_id: Source external id for Antrea traceflow. Must be
            ContainerApplicationInstance external_id.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.container_cluster_id = container_cluster_id
        self.destination_external_id = destination_external_id
        self.is_transient = is_transient
        self.packet = packet
        self.source_external_id = source_external_id
        VapiStruct.__init__(self)


AntreaTraceflowConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'container_cluster_id': type.OptionalType(type.StringType()),
        'destination_external_id': type.OptionalType(type.StringType()),
        'is_transient': type.OptionalType(type.BooleanType()),
        'packet': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowPacketData')),
        'source_external_id': type.OptionalType(type.StringType()),
    },
    AntreaTraceflowConfig,
    False,
    None))



class AntreaTraceflowConfigListResult(VapiStruct):
    """
    Paged Collection for AntreaTraceflowConfigs.

    .. 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_: 
        :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:`AntreaTraceflowConfig` or ``None``
        :param results: AntreaTraceflowConfig 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)


AntreaTraceflowConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_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__, 'AntreaTraceflowConfig'))),
    },
    AntreaTraceflowConfigListResult,
    False,
    None))



class AntreaTraceflowIcmpEchoRequestHeader(VapiStruct):
    """
    IcmpEchoRequest header stuffs for Antrea traceflow.

    .. 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: Id of IcmpEchoRequest. format: int64
        :type  sequence: :class:`long` or ``None``
        :param sequence: Sequence number of IcmpEchoRequest. format: int64
        """
        self.id = id
        self.sequence = sequence
        VapiStruct.__init__(self)


AntreaTraceflowIcmpEchoRequestHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_icmp_echo_request_header', {
        'id': type.OptionalType(type.IntegerType()),
        'sequence': type.OptionalType(type.IntegerType()),
    },
    AntreaTraceflowIcmpEchoRequestHeader,
    False,
    None))



class AntreaTraceflowIpHeader(VapiStruct):
    """
    Ip header stuffs for Antrea traceflow.

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



    _canonical_to_pep_names = {
                            'dstIp': 'dst_ip',
                            'flags': 'flags',
                            'protocol': 'protocol',
                            'srcIp': 'src_ip',
                            'ttl': 'ttl',
                            }

    def __init__(self,
                 dst_ip=None,
                 flags=None,
                 protocol=None,
                 src_ip=None,
                 ttl=None,
                ):
        """
        :type  dst_ip: :class:`str` or ``None``
        :param dst_ip: Destination ip address in IpHeader.
        :type  flags: :class:`long` or ``None``
        :param flags: Protocol setting in IpHeader. format: int64
        :type  protocol: :class:`long` or ``None``
        :param protocol: Protocol setting in IpHeader. format: int64
        :type  src_ip: :class:`str` or ``None``
        :param src_ip: Source ip address in IpHeader.
        :type  ttl: :class:`long` or ``None``
        :param ttl: TTL value in IpHeader. Default is 64. format: int64
        """
        self.dst_ip = dst_ip
        self.flags = flags
        self.protocol = protocol
        self.src_ip = src_ip
        self.ttl = ttl
        VapiStruct.__init__(self)


AntreaTraceflowIpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_ip_header', {
        'dstIp': type.OptionalType(type.StringType()),
        'flags': type.OptionalType(type.IntegerType()),
        'protocol': type.OptionalType(type.IntegerType()),
        'srcIp': type.OptionalType(type.StringType()),
        'ttl': type.OptionalType(type.IntegerType()),
    },
    AntreaTraceflowIpHeader,
    False,
    None))



class AntreaTraceflowIpv6Header(VapiStruct):
    """
    Ipv6 header stuffs for Antrea traceflow.

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



    _canonical_to_pep_names = {
                            'dstIp': 'dst_ip',
                            'hopLimit': 'hop_limit',
                            'nextHeader': 'next_header',
                            'srcIp': '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: Destination ip address in Ipv6Header.
        :type  hop_limit: :class:`long` or ``None``
        :param hop_limit: Hop limit setting in Ipv6Header. format: int64
        :type  next_header: :class:`long` or ``None``
        :param next_header: Next header setting in Ipv6Header. format: int64
        :type  src_ip: :class:`str` or ``None``
        :param src_ip: Source ip address in Ipv6Header.
        """
        self.dst_ip = dst_ip
        self.hop_limit = hop_limit
        self.next_header = next_header
        self.src_ip = src_ip
        VapiStruct.__init__(self)


AntreaTraceflowIpv6Header._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_ipv6_header', {
        'dstIp': type.OptionalType(type.StringType()),
        'hopLimit': type.OptionalType(type.IntegerType()),
        'nextHeader': type.OptionalType(type.IntegerType()),
        'srcIp': type.OptionalType(type.StringType()),
    },
    AntreaTraceflowIpv6Header,
    False,
    None))



class AntreaTraceflowObservation(VapiStruct):
    """
    Observation result for Antrea traceflow.

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


    """
    COMPONENT_TYPE_ANTREA_SPOOFGUARD = "ANTREA_SPOOFGUARD"
    """


    """
    COMPONENT_TYPE_ANTREA_LB = "ANTREA_LB"
    """


    """
    COMPONENT_TYPE_ANTREA_ROUTING = "ANTREA_ROUTING"
    """


    """
    COMPONENT_TYPE_ANTREA_DFW = "ANTREA_DFW"
    """


    """
    COMPONENT_TYPE_ANTREA_FORWARDING = "ANTREA_FORWARDING"
    """


    """
    OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONDELIVERED = "AntreaTraceflowObservationDelivered"
    """


    """
    OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONRECEIVED = "AntreaTraceflowObservationReceived"
    """


    """
    OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONFORWARDED = "AntreaTraceflowObservationForwarded"
    """


    """
    OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONDROPPED = "AntreaTraceflowObservationDropped"
    """


    """



    _canonical_to_pep_names = {
                            'component_type': 'component_type',
                            'container_node_id': 'container_node_id',
                            'observation_type': 'observation_type',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 component_type=None,
                 container_node_id=None,
                 observation_type=None,
                 timestamp=None,
                ):
        """
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`AntreaTraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            *
              :attr:`AntreaTraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`AntreaTraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`AntreaTraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`AntreaTraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            *
              :attr:`AntreaTraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            
            The type 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  container_node_id: :class:`str` or ``None``
        :param container_node_id: UID of the container 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  observation_type: :class:`str` or ``None``
        :param observation_type: Possible values are: 
            
            *
              :attr:`AntreaTraceflowObservation.OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`AntreaTraceflowObservation.OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`AntreaTraceflowObservation.OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`AntreaTraceflowObservation.OBSERVATION_TYPE_ANTREATRACEFLOWOBSERVATIONDROPPED`
            
            The type of observation. AntreaTraceflowObservationDelivered: The
            packet was delivered to destination Pod properly
            AntreaTraceflowObservationReceived: The packet was received from
            another ContainerNode AntreaTraceflowObservationForwarded: The
            packet was forwarded to next logical node or ContainerNode
            AntreaTraceflowObservationDropped: The packet was dropped
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was collect by Antrea controller.
            format: int64
            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.container_node_id = container_node_id
        self.observation_type = observation_type
        self.timestamp = timestamp
        VapiStruct.__init__(self)


AntreaTraceflowObservation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_observation', {
        'component_type': type.OptionalType(type.StringType()),
        'container_node_id': type.OptionalType(type.StringType()),
        'observation_type': type.OptionalType(type.StringType()),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    AntreaTraceflowObservation,
    False,
    None))



class AntreaTraceflowObservationListResult(VapiStruct):
    """
    List collection for AnteaTraceflowObservation, used in batch API.

    .. 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_: 
        :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:`AntreaTraceflowObservation` or ``None``
        :param results: AntreaTraceflowObservation 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)


AntreaTraceflowObservationListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_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.ReferenceType(__name__, 'AntreaTraceflowObservation'))),
    },
    AntreaTraceflowObservationListResult,
    False,
    None))



class AntreaTraceflowPacketData(VapiStruct):
    """
    Packet data stuffs for Antrea traceflow.

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


    """
    RESOURCE_TYPE_BINARY_PACKET_DATA = "BINARY_PACKET_DATA"
    """


    """
    TRANSPORT_TYPE_UNICAST = "UNICAST"
    """


    """
    TRANSPORT_TYPE_MULTICAST = "MULTICAST"
    """


    """
    TRANSPORT_TYPE_BROADCAST = "BROADCAST"
    """


    """
    TRANSPORT_TYPE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'frameSize': 'frame_size',
                            'ipHeader': 'ip_header',
                            'ipv6Header': 'ipv6_header',
                            'payload': 'payload',
                            'resourceType': 'resource_type',
                            'transportHeader': 'transport_header',
                            'transportType': 'transport_type',
                            }

    def __init__(self,
                 frame_size=None,
                 ip_header=None,
                 ipv6_header=None,
                 payload=None,
                 resource_type=None,
                 transport_header=None,
                 transport_type=None,
                ):
        """
        :type  frame_size: :class:`long` or ``None``
        :param frame_size: This property is used to set packet data size. format: int64
        :type  ip_header: :class:`AntreaTraceflowIpHeader` or ``None``
        :param ip_header: 
        :type  ipv6_header: :class:`AntreaTraceflowIpv6Header` or ``None``
        :param ipv6_header: 
        :type  payload: :class:`str` or ``None``
        :param payload: This property is used to set payload data.
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: Possible values are: 
            
            *
              :attr:`AntreaTraceflowPacketData.RESOURCE_TYPE_FIELDS_PACKET_DATA`
            *
              :attr:`AntreaTraceflowPacketData.RESOURCE_TYPE_BINARY_PACKET_DATA`
            
            This property is used to set resource type.
        :type  transport_header: :class:`AntreaTraceflowTransportHeader` or ``None``
        :param transport_header: 
        :type  transport_type: :class:`str` or ``None``
        :param transport_type: Possible values are: 
            
            * :attr:`AntreaTraceflowPacketData.TRANSPORT_TYPE_UNICAST`
            * :attr:`AntreaTraceflowPacketData.TRANSPORT_TYPE_MULTICAST`
            * :attr:`AntreaTraceflowPacketData.TRANSPORT_TYPE_BROADCAST`
            * :attr:`AntreaTraceflowPacketData.TRANSPORT_TYPE_UNKNOWN`
            
            This property is used to set transport type.
        """
        self.frame_size = frame_size
        self.ip_header = ip_header
        self.ipv6_header = ipv6_header
        self.payload = payload
        self.resource_type = resource_type
        self.transport_header = transport_header
        self.transport_type = transport_type
        VapiStruct.__init__(self)


AntreaTraceflowPacketData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_packet_data', {
        'frameSize': type.OptionalType(type.IntegerType()),
        'ipHeader': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowIpHeader')),
        'ipv6Header': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowIpv6Header')),
        'payload': type.OptionalType(type.StringType()),
        'resourceType': type.OptionalType(type.StringType()),
        'transportHeader': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowTransportHeader')),
        'transportType': type.OptionalType(type.StringType()),
    },
    AntreaTraceflowPacketData,
    False,
    None))



class AntreaTraceflowStatus(VapiStruct):
    """
    The status value of one Antrea traceflow.

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


    """
    PHASE_FAILED = "FAILED"
    """


    """



    _canonical_to_pep_names = {
                            'phase': 'phase',
                            'reason': 'reason',
                            }

    def __init__(self,
                 phase=None,
                 reason=None,
                ):
        """
        :type  phase: :class:`str` or ``None``
        :param phase: Possible values are: 
            
            * :attr:`AntreaTraceflowStatus.PHASE_SUCCEEDED`
            * :attr:`AntreaTraceflowStatus.PHASE_FAILED`
            
            The execution phase of one traceflow.
        :type  reason: :class:`str` or ``None``
        :param reason: The reason for the failure.
        """
        self.phase = phase
        self.reason = reason
        VapiStruct.__init__(self)


AntreaTraceflowStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_status', {
        'phase': type.OptionalType(type.StringType()),
        'reason': type.OptionalType(type.StringType()),
    },
    AntreaTraceflowStatus,
    False,
    None))



class AntreaTraceflowTcpHeader(VapiStruct):
    """
    Tcp header stuffs for Antrea traceflow.

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



    _canonical_to_pep_names = {
                            'dstPort': 'dst_port',
                            'srcPort': 'src_port',
                            'tcpFlags': '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 number in TcpHeader. format: int64
        :type  src_port: :class:`long` or ``None``
        :param src_port: Source port number in TcpHeader. format: int64
        :type  tcp_flags: :class:`long` or ``None``
        :param tcp_flags: Tcp flags in TcpHeader. SYN flag must be set for traceflow. format:
            int64
        """
        self.dst_port = dst_port
        self.src_port = src_port
        self.tcp_flags = tcp_flags
        VapiStruct.__init__(self)


AntreaTraceflowTcpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_tcp_header', {
        'dstPort': type.OptionalType(type.IntegerType()),
        'srcPort': type.OptionalType(type.IntegerType()),
        'tcpFlags': type.OptionalType(type.IntegerType()),
    },
    AntreaTraceflowTcpHeader,
    False,
    None))



class AntreaTraceflowTransportHeader(VapiStruct):
    """
    Transport header stuffs for Antrea traceflow.

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



    _canonical_to_pep_names = {
                            'icmpEchoRequestHeader': 'icmp_echo_request_header',
                            'tcpHeader': 'tcp_header',
                            'udpHeader': 'udp_header',
                            }

    def __init__(self,
                 icmp_echo_request_header=None,
                 tcp_header=None,
                 udp_header=None,
                ):
        """
        :type  icmp_echo_request_header: :class:`AntreaTraceflowIcmpEchoRequestHeader` or ``None``
        :param icmp_echo_request_header: 
        :type  tcp_header: :class:`AntreaTraceflowTcpHeader` or ``None``
        :param tcp_header: 
        :type  udp_header: :class:`AntreaTraceflowUdpHeader` or ``None``
        :param udp_header: 
        """
        self.icmp_echo_request_header = icmp_echo_request_header
        self.tcp_header = tcp_header
        self.udp_header = udp_header
        VapiStruct.__init__(self)


AntreaTraceflowTransportHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_transport_header', {
        'icmpEchoRequestHeader': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowIcmpEchoRequestHeader')),
        'tcpHeader': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowTcpHeader')),
        'udpHeader': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowUdpHeader')),
    },
    AntreaTraceflowTransportHeader,
    False,
    None))



class AntreaTraceflowUdpHeader(VapiStruct):
    """
    Udp header stuffs for Antrea traceflow.

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



    _canonical_to_pep_names = {
                            'dstPort': 'dst_port',
                            'srcPort': 'src_port',
                            }

    def __init__(self,
                 dst_port=None,
                 src_port=None,
                ):
        """
        :type  dst_port: :class:`long` or ``None``
        :param dst_port: Destination port number in UdpHeader. format: int64
        :type  src_port: :class:`long` or ``None``
        :param src_port: Source port number in UdpHeader. format: int64
        """
        self.dst_port = dst_port
        self.src_port = src_port
        VapiStruct.__init__(self)


AntreaTraceflowUdpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.antrea_traceflow_udp_header', {
        'dstPort': type.OptionalType(type.IntegerType()),
        'srcPort': type.OptionalType(type.IntegerType()),
    },
    AntreaTraceflowUdpHeader,
    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 ApiServiceConfig(VapiStruct):
    """
    Properties that affect the configuration of the NSX API 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',
                            'basic_authentication_enabled': 'basic_authentication_enabled',
                            'cipher_suites': 'cipher_suites',
                            'client_api_concurrency_limit': 'client_api_concurrency_limit',
                            'client_api_rate_limit': 'client_api_rate_limit',
                            'connection_timeout': 'connection_timeout',
                            'cookie_based_authentication_enabled': 'cookie_based_authentication_enabled',
                            'global_api_concurrency_limit': 'global_api_concurrency_limit',
                            'lockout_immune_addresses': 'lockout_immune_addresses',
                            'protocol_versions': 'protocol_versions',
                            'redirect_host': 'redirect_host',
                            'session_timeout': 'session_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,
                 basic_authentication_enabled=None,
                 cipher_suites=None,
                 client_api_concurrency_limit=None,
                 client_api_rate_limit=None,
                 connection_timeout=None,
                 cookie_based_authentication_enabled=None,
                 global_api_concurrency_limit=None,
                 lockout_immune_addresses=None,
                 protocol_versions=None,
                 redirect_host=None,
                 session_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  basic_authentication_enabled: :class:`bool` or ``None``
        :param basic_authentication_enabled: Identifies whether basic authentication is enabled or disabled in
            API calls.
        :type  cipher_suites: :class:`list` of :class:`CipherSuite` or ``None``
        :param cipher_suites: The TLS cipher suites that the API service will negotiate.
        :type  client_api_concurrency_limit: :class:`long` or ``None``
        :param client_api_concurrency_limit: The maximum number of concurrent API requests that will be serviced
            for a given authenticated client. If the number of API requests
            being processed exceeds this limit, new API requests will be
            refused and a 503 Service Unavailable response will be returned to
            the client. To disable API concurrency limiting, set this value to
            0. format: int64
        :type  client_api_rate_limit: :class:`long` or ``None``
        :param client_api_rate_limit: The maximum number of API requests that will be serviced per second
            for a given authenticated client. If more API requests are received
            than can be serviced, a 429 Too Many Requests HTTP response will be
            returned. To disable API rate limiting, set this value to 0.
            format: int64
        :type  connection_timeout: :class:`long` or ``None``
        :param connection_timeout: NSX connection timeout, in seconds. To disable timeout, set to 0.
            format: int64
        :type  cookie_based_authentication_enabled: :class:`bool` or ``None``
        :param cookie_based_authentication_enabled: Identifies whether cookie-based authentication is enabled or
            disabled in API calls. When cookie-based authentication is
            disabled, new sessions cannot be created via /api/session/create.
        :type  global_api_concurrency_limit: :class:`long` or ``None``
        :param global_api_concurrency_limit: The maximum number of concurrent API requests that will be
            serviced. If the number of API requests being processed exceeds
            this limit, new API requests will be refused and a 503 Service
            Unavailable response will be returned to the client. To disable API
            concurrency limiting, set this value to 0. format: int64
        :type  lockout_immune_addresses: :class:`list` of :class:`str` or ``None``
        :param lockout_immune_addresses: The list of IP addresses which are not subjected to a lockout on
            failed login attempts. format: ip
        :type  protocol_versions: :class:`list` of :class:`ProtocolVersion` or ``None``
        :param protocol_versions: The TLS protocol versions that the API service will negotiate.
        :type  redirect_host: :class:`str` or ``None``
        :param redirect_host: Host name or IP address to use for redirect location headers, or
            empty string to derive from current request. To disable, set
            redirect_host to the empty string (\"\").
        :type  session_timeout: :class:`long` or ``None``
        :param session_timeout: NSX session inactivity 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.basic_authentication_enabled = basic_authentication_enabled
        self.cipher_suites = cipher_suites
        self.client_api_concurrency_limit = client_api_concurrency_limit
        self.client_api_rate_limit = client_api_rate_limit
        self.connection_timeout = connection_timeout
        self.cookie_based_authentication_enabled = cookie_based_authentication_enabled
        self.global_api_concurrency_limit = global_api_concurrency_limit
        self.lockout_immune_addresses = lockout_immune_addresses
        self.protocol_versions = protocol_versions
        self.redirect_host = redirect_host
        self.session_timeout = session_timeout
        VapiStruct.__init__(self)


ApiServiceConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.api_service_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'))),
        'basic_authentication_enabled': type.OptionalType(type.BooleanType()),
        'cipher_suites': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CipherSuite'))),
        'client_api_concurrency_limit': type.OptionalType(type.IntegerType()),
        'client_api_rate_limit': type.OptionalType(type.IntegerType()),
        'connection_timeout': type.OptionalType(type.IntegerType()),
        'cookie_based_authentication_enabled': type.OptionalType(type.BooleanType()),
        'global_api_concurrency_limit': type.OptionalType(type.IntegerType()),
        'lockout_immune_addresses': type.OptionalType(type.ListType(type.StringType())),
        'protocol_versions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ProtocolVersion'))),
        'redirect_host': type.OptionalType(type.StringType()),
        'session_timeout': type.OptionalType(type.IntegerType()),
    },
    ApiServiceConfig,
    False,
    None))



class ApplianceLatencyData(VapiStruct):
    """
    Display the latency data by given appliance node

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



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'id': 'id',
                            'latency_data': 'latency_data',
                            'name': 'name',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 id=None,
                 latency_data=None,
                 name=None,
                 timestamp=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  id: :class:`str` or ``None``
        :param id: Display the Appliance id.
        :type  latency_data: :class:`list` of :class:`ApplianceLatencyDataItem` or ``None``
        :param latency_data: Latency Data list.
        :type  name: :class:`str` or ``None``
        :param name: Display the appliance name.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp of last modification. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.id = id
        self.latency_data = latency_data
        self.name = name
        self.timestamp = timestamp
        VapiStruct.__init__(self)


ApplianceLatencyData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.appliance_latency_data', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'id': type.OptionalType(type.StringType()),
        'latency_data': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ApplianceLatencyDataItem'))),
        'name': type.OptionalType(type.StringType()),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    ApplianceLatencyData,
    False,
    None))



class ApplianceLatencyDataItem(VapiStruct):
    """
    Describes appliance latency data in detail.

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


    """
    STATUS_DOWN = "DOWN"
    """


    """



    _canonical_to_pep_names = {
                            'destination_node_id': 'destination_node_id',
                            'destination_node_ip': 'destination_node_ip',
                            'destination_node_name': 'destination_node_name',
                            'packet_loss_percent': 'packet_loss_percent',
                            'packet_received': 'packet_received',
                            'packet_transmitted': 'packet_transmitted',
                            'rtt_avg': 'rtt_avg',
                            'rtt_max': 'rtt_max',
                            'rtt_mdev': 'rtt_mdev',
                            'rtt_min': 'rtt_min',
                            'source_node_ip': 'source_node_ip',
                            'status': 'status',
                            'total_time': 'total_time',
                            }

    def __init__(self,
                 destination_node_id=None,
                 destination_node_ip=None,
                 destination_node_name=None,
                 packet_loss_percent=None,
                 packet_received=None,
                 packet_transmitted=None,
                 rtt_avg=None,
                 rtt_max=None,
                 rtt_mdev=None,
                 rtt_min=None,
                 source_node_ip=None,
                 status=None,
                 total_time=None,
                ):
        """
        :type  destination_node_id: :class:`str` or ``None``
        :param destination_node_id: Display the appliance node id.
        :type  destination_node_ip: :class:`str` or ``None``
        :param destination_node_ip: Display the appliance node ip.
        :type  destination_node_name: :class:`str` or ``None``
        :param destination_node_name: Display the appliance node name.
        :type  packet_loss_percent: :class:`str` or ``None``
        :param packet_loss_percent: Display the percentage of lost packet.
        :type  packet_received: :class:`long` or ``None``
        :param packet_received: Display the received packets. format: int64
        :type  packet_transmitted: :class:`long` or ``None``
        :param packet_transmitted: Display the transmitted packets in Ping format: int64
        :type  rtt_avg: :class:`float` or ``None``
        :param rtt_avg: Display the average Round Trip Time in milliseconds.
        :type  rtt_max: :class:`float` or ``None``
        :param rtt_max: Display the max Round Trip Time in milliseconds.
        :type  rtt_mdev: :class:`float` or ``None``
        :param rtt_mdev: Display the mean Round Trip Time in milliseconds.
        :type  rtt_min: :class:`float` or ``None``
        :param rtt_min: Display the min Round Trip Time in milliseconds.
        :type  source_node_ip: :class:`str` or ``None``
        :param source_node_ip: Display the appliance node ip.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`ApplianceLatencyDataItem.STATUS_UP`
            * :attr:`ApplianceLatencyDataItem.STATUS_DOWN`
            
            Display the connection status between source node and destination
            node.
        :type  total_time: :class:`long` or ``None``
        :param total_time: Display the total time of sending and receiving packets in
            milliseconds. format: int64
        """
        self.destination_node_id = destination_node_id
        self.destination_node_ip = destination_node_ip
        self.destination_node_name = destination_node_name
        self.packet_loss_percent = packet_loss_percent
        self.packet_received = packet_received
        self.packet_transmitted = packet_transmitted
        self.rtt_avg = rtt_avg
        self.rtt_max = rtt_max
        self.rtt_mdev = rtt_mdev
        self.rtt_min = rtt_min
        self.source_node_ip = source_node_ip
        self.status = status
        self.total_time = total_time
        VapiStruct.__init__(self)


ApplianceLatencyDataItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.appliance_latency_data_item', {
        'destination_node_id': type.OptionalType(type.StringType()),
        'destination_node_ip': type.OptionalType(type.StringType()),
        'destination_node_name': type.OptionalType(type.StringType()),
        'packet_loss_percent': type.OptionalType(type.StringType()),
        'packet_received': type.OptionalType(type.IntegerType()),
        'packet_transmitted': type.OptionalType(type.IntegerType()),
        'rtt_avg': type.OptionalType(type.DoubleType()),
        'rtt_max': type.OptionalType(type.DoubleType()),
        'rtt_mdev': type.OptionalType(type.DoubleType()),
        'rtt_min': type.OptionalType(type.DoubleType()),
        'source_node_ip': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'total_time': type.OptionalType(type.IntegerType()),
    },
    ApplianceLatencyDataItem,
    False,
    None))



class ApplianceLatencyListResult(VapiStruct):
    """
    List of process data

    .. 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_: 
        :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: Total appliance latency count format: int64
        :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:`ApplianceLatencyData` or ``None``
        :param results: Display the appliance latency data 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)


ApplianceLatencyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.appliance_latency_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__, 'ApplianceLatencyData'))),
    },
    ApplianceLatencyListResult,
    False,
    None))



class ApplianceProcessData(VapiStruct):
    """
    List of process data in given appliance node

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



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'id': 'id',
                            'name': 'name',
                            'timestamp': 'timestamp',
                            'top_process_by_cpu_count': 'top_process_by_cpu_count',
                            'top_process_by_cpu_list': 'top_process_by_cpu_list',
                            'top_process_by_mem_count': 'top_process_by_mem_count',
                            'top_process_by_mem_list': 'top_process_by_mem_list',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 id=None,
                 name=None,
                 timestamp=None,
                 top_process_by_cpu_count=None,
                 top_process_by_cpu_list=None,
                 top_process_by_mem_count=None,
                 top_process_by_mem_list=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  id: :class:`str` or ``None``
        :param id: Display the Appliance id.
        :type  name: :class:`str` or ``None``
        :param name: Display the appliance name.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp of last modification. format: int64
        :type  top_process_by_cpu_count: :class:`long` or ``None``
        :param top_process_by_cpu_count: Display the total count of process. format: int64
        :type  top_process_by_cpu_list: :class:`list` of :class:`ProcessInformation` or ``None``
        :param top_process_by_cpu_list: Display the top process list by CPU.
        :type  top_process_by_mem_count: :class:`long` or ``None``
        :param top_process_by_mem_count: Display the total count of process. format: int64
        :type  top_process_by_mem_list: :class:`list` of :class:`ProcessInformation` or ``None``
        :param top_process_by_mem_list: Display the top process list by memory.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.id = id
        self.name = name
        self.timestamp = timestamp
        self.top_process_by_cpu_count = top_process_by_cpu_count
        self.top_process_by_cpu_list = top_process_by_cpu_list
        self.top_process_by_mem_count = top_process_by_mem_count
        self.top_process_by_mem_list = top_process_by_mem_list
        VapiStruct.__init__(self)


ApplianceProcessData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.appliance_process_data', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'id': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'top_process_by_cpu_count': type.OptionalType(type.IntegerType()),
        'top_process_by_cpu_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ProcessInformation'))),
        'top_process_by_mem_count': type.OptionalType(type.IntegerType()),
        'top_process_by_mem_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ProcessInformation'))),
    },
    ApplianceProcessData,
    False,
    None))



class ApplianceProcessListResult(VapiStruct):
    """
    List of process data

    .. 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_: 
        :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:`ApplianceProcessData` or ``None``
        :param results: Display the appliance process 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)


ApplianceProcessListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.appliance_process_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__, 'ApplianceProcessData'))),
    },
    ApplianceProcessListResult,
    False,
    None))



class ApplicationConnectivityStrategy(VapiStruct):
    """
    Allows more granular policies for application workloads

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


    """
    APPLICATION_CONNECTIVITY_STRATEGY_ALLOW_EGRESS = "ALLOW_EGRESS"
    """


    """
    APPLICATION_CONNECTIVITY_STRATEGY_ALLOW_INGRESS = "ALLOW_INGRESS"
    """


    """
    APPLICATION_CONNECTIVITY_STRATEGY_DROP_INGRESS = "DROP_INGRESS"
    """


    """
    APPLICATION_CONNECTIVITY_STRATEGY_DROP_EGRESS = "DROP_EGRESS"
    """


    """



    _canonical_to_pep_names = {
                            'application_connectivity_strategy': 'application_connectivity_strategy',
                            'default_application_rule_id': 'default_application_rule_id',
                            'logging_enabled': 'logging_enabled',
                            }

    def __init__(self,
                 application_connectivity_strategy=None,
                 default_application_rule_id=None,
                 logging_enabled=None,
                ):
        """
        :type  application_connectivity_strategy: :class:`str` or ``None``
        :param application_connectivity_strategy: Possible values are: 
            
            *
              :attr:`ApplicationConnectivityStrategy.APPLICATION_CONNECTIVITY_STRATEGY_ALLOW_INTRA`
            *
              :attr:`ApplicationConnectivityStrategy.APPLICATION_CONNECTIVITY_STRATEGY_ALLOW_EGRESS`
            *
              :attr:`ApplicationConnectivityStrategy.APPLICATION_CONNECTIVITY_STRATEGY_ALLOW_INGRESS`
            *
              :attr:`ApplicationConnectivityStrategy.APPLICATION_CONNECTIVITY_STRATEGY_DROP_INGRESS`
            *
              :attr:`ApplicationConnectivityStrategy.APPLICATION_CONNECTIVITY_STRATEGY_DROP_EGRESS`
            
            App connectivity strategies
        :type  default_application_rule_id: :class:`long` or ``None``
        :param default_application_rule_id: Based on the value of the app 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  logging_enabled: :class:`bool` or ``None``
        :param logging_enabled: Flag to enable packet logging. Default is deactivated.
        """
        self.application_connectivity_strategy = application_connectivity_strategy
        self.default_application_rule_id = default_application_rule_id
        self.logging_enabled = logging_enabled
        VapiStruct.__init__(self)


ApplicationConnectivityStrategy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.application_connectivity_strategy', {
        'application_connectivity_strategy': type.OptionalType(type.StringType()),
        'default_application_rule_id': type.OptionalType(type.IntegerType()),
        'logging_enabled': type.OptionalType(type.BooleanType()),
    },
    ApplicationConnectivityStrategy,
    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 AssignedByAutoConf(VapiStruct):
    """
    This type can be specified in ipv6 assignment spec of host switch if
    auto-conf based IPv6 assignment is desired for host switch virtual tunnel
    endpoints.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "AssignedByAutoConf"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='AssignedByAutoConf',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6POOLSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6LISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCPV6`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6MACLISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYAUTOCONF`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_NOIPV6`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class AssignedByDhcp(VapiStruct):
    """
    This type can be specified in ip assignment spec of host switch if DHCP
    based IP assignment is desired for host switch virtual tunnel endpoints.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "AssignedByDhcp"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='AssignedByDhcp',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPPOOLSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCP`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPMACLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_NOIPV4`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class AssignedByDhcpv6(VapiStruct):
    """
    This type can be specified in ip assignment spec of host switch if DHCP
    based IP assignment is desired for host switch virtual tunnel endpoints.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "AssignedByDhcpv6"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='AssignedByDhcpv6',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6POOLSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6LISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCPV6`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6MACLISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYAUTOCONF`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_NOIPV6`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class AsyncCompatibilityCheckResult(VapiStruct):
    """
    This result shows the location of the asynchronous compatibility check that
    will be created and updated later on after starting the NSX+ compatibility
    check.

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



    _canonical_to_pep_names = {
                            'compatibility_validation_results': 'compatibility_validation_results',
                            }

    def __init__(self,
                 compatibility_validation_results=None,
                ):
        """
        :type  compatibility_validation_results: :class:`str` or ``None``
        :param compatibility_validation_results: Result for NSX+ compatibility check
            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.compatibility_validation_results = compatibility_validation_results
        VapiStruct.__init__(self)


AsyncCompatibilityCheckResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.async_compatibility_check_result', {
        'compatibility_validation_results': type.OptionalType(type.StringType()),
    },
    AsyncCompatibilityCheckResult,
    False,
    None))



class AttachedInterfaceEntry(VapiStruct):
    """
    The Attached interface is only effective for the segment port on Bare metal
    server.

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



    _canonical_to_pep_names = {
                            'app_intf_name': 'app_intf_name',
                            'default_gateway': 'default_gateway',
                            'migrate_intf': 'migrate_intf',
                            'routing_table': 'routing_table',
                            }

    def __init__(self,
                 app_intf_name=None,
                 default_gateway=None,
                 migrate_intf=None,
                 routing_table=None,
                ):
        """
        :type  app_intf_name: :class:`str` or ``None``
        :param app_intf_name: The name of application interface
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Gateway IP format: ip
        :type  migrate_intf: :class:`str` or ``None``
        :param migrate_intf: IP configuration on migrate_intf will migrate to app_intf_name. It
            is used for Management and Application sharing the same IP.
        :type  routing_table: :class:`list` of :class:`str` or ``None``
        :param routing_table: Routing rules
        """
        self.app_intf_name = app_intf_name
        self.default_gateway = default_gateway
        self.migrate_intf = migrate_intf
        self.routing_table = routing_table
        VapiStruct.__init__(self)


AttachedInterfaceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.attached_interface_entry', {
        'app_intf_name': type.OptionalType(type.StringType()),
        'default_gateway': type.OptionalType(type.StringType()),
        'migrate_intf': type.OptionalType(type.StringType()),
        'routing_table': type.OptionalType(type.ListType(type.StringType())),
    },
    AttachedInterfaceEntry,
    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 AutoRds(VapiStruct):
    """
    This object holds auto assigned route distinguishers for Layer 2 and Layer
    3 configurations.

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



    _canonical_to_pep_names = {
                            'l2_auto_rds': 'l2_auto_rds',
                            'l3_auto_rd': 'l3_auto_rd',
                            }

    def __init__(self,
                 l2_auto_rds=None,
                 l3_auto_rd=None,
                ):
        """
        :type  l2_auto_rds: :class:`list` of :class:`L2AutoRD` or ``None``
        :param l2_auto_rds: List of layer 2 Auto assigned Route Distinguisher
        :type  l3_auto_rd: :class:`str` or ``None``
        :param l3_auto_rd: This field is auto assigned by the system. The auto RD seed is
            populated when user does not assign a route_distinguisher field in
            the gateway.
        """
        self.l2_auto_rds = l2_auto_rds
        self.l3_auto_rd = l3_auto_rd
        VapiStruct.__init__(self)


AutoRds._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.auto_rds', {
        'l2_auto_rds': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2AutoRD'))),
        'l3_auto_rd': type.OptionalType(type.StringType()),
    },
    AutoRds,
    False,
    None))



class AviConnectionInfo(VapiStruct):
    """
    Credential info to connect to a AVI type of enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "AviConnectionInfo"
    """
    Identifier denoting this class, when it is used 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_ACTIVATE = "ACTIVATE"
    """


    """
    STATUS_DEACTIVATE_PROVIDER = "DEACTIVATE_PROVIDER"
    """


    """
    STATUS_DEACTIVATE_API = "DEACTIVATE_API"
    """


    """



    _canonical_to_pep_names = {
                            'certificate': 'certificate',
                            'cloud': 'cloud',
                            'expires_at': 'expires_at',
                            'is_default_cert': 'is_default_cert',
                            'managed_by': 'managed_by',
                            'password': 'password',
                            'status': 'status',
                            'tenant': 'tenant',
                            'thumbprint': 'thumbprint',
                            'username': 'username',
                            'version': 'version',
                            'enforcement_point_address': 'enforcement_point_address',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 certificate=None,
                 cloud=None,
                 expires_at=None,
                 is_default_cert=None,
                 managed_by=None,
                 password=None,
                 status=None,
                 tenant=None,
                 thumbprint=None,
                 username=None,
                 version=None,
                 enforcement_point_address=None,
                 resource_type='AviConnectionInfo',
                ):
        """
        :type  certificate: :class:`str` or ``None``
        :param certificate: Certificate used when on-borading workflow created by LCM/VCF.
        :type  cloud: :class:`str` or ``None``
        :param cloud: Clouds are containers for the environment that Avi Vantage is
            installed or operating within. During initial setup of Vantage, a
            default cloud, named Default-Cloud, is created. This is where the
            first Controller is deployed, into Default-Cloud. Additional clouds
            may be added, containing SEs and virtual services. This is a
            deprecated property. Cloud has been renamed to cloud_name and it
            will added from specific ALB entity.

            .. deprecated:: unknown
        :type  expires_at: :class:`str` or ``None``
        :param expires_at: Expiry time of the token will be set by LCM at the time of
            Enforcement Point Creation.
        :type  is_default_cert: :class:`bool` or ``None``
        :param is_default_cert: Advanced Load Balancer controller using default portal certificate.
        :type  managed_by: :class:`str` or ``None``
        :param managed_by: Managed by used when on-borading workflow created by LCM/VCF.
        :type  password: :class:`str` or ``None``
        :param password: Password or Token for Avi Controller.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`AviConnectionInfo.STATUS_ACTIVATE`
            * :attr:`AviConnectionInfo.STATUS_DEACTIVATE_PROVIDER`
            * :attr:`AviConnectionInfo.STATUS_DEACTIVATE_API`
            
            This is connection property which checks whether ALB is connected
            to the controller. Enum options - ACTIVATE, DEACTIVATE_PROVIDER,
            DEACTIVATE_API. Default value is DEACTIVATE_API.
        :type  tenant: :class:`str` or ``None``
        :param tenant: A tenant is an isolated instance of Avi Controller. Each Avi user
            account is associated with one or more tenants. The tenant
            associated with a user account defines the resources that user can
            access within Avi Vantage. When a user logs in, Avi restricts their
            access to only those resources that are in the same tenant
        :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  version: :class:`str` or ``None``
        :param version: Avi supports API versioning for backward compatibility with
            automation scripts written for an object model older than the
            current one. Such scripts need not be updated to keep up with
            object model changes This is a deprecated property. The version is
            now auto populated from property file and its value can be read
            using APIs

            .. deprecated:: unknown
        :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`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_AVICONNECTIONINFO`
            
            Resource Type of Enforcement Point Connection Info.
        """
        self.certificate = certificate
        self.cloud = cloud
        self.expires_at = expires_at
        self.is_default_cert = is_default_cert
        self.managed_by = managed_by
        self.password = password
        self.status = status
        self.tenant = tenant
        self.thumbprint = thumbprint
        self.username = username
        self.version = version
        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

AviConnectionInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.avi_connection_info', {
        'certificate': type.OptionalType(type.StringType()),
        'cloud': type.OptionalType(type.StringType()),
        'expires_at': type.OptionalType(type.StringType()),
        'is_default_cert': type.OptionalType(type.BooleanType()),
        'managed_by': type.OptionalType(type.StringType()),
        'password': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'tenant': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
        'enforcement_point_address': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    AviConnectionInfo,
    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',
                            'x_labels': 'x_labels',
                            'y_axis_unit_labels': 'y_axis_unit_labels',
                            'y_axis_units': 'y_axis_units',
                            'y_label': 'y_label',
                            'y_labels': 'y_labels',
                            }

    def __init__(self,
                 x_label=None,
                 x_labels=None,
                 y_axis_unit_labels=None,
                 y_axis_units=None,
                 y_label=None,
                 y_labels=None,
                ):
        """
        :type  x_label: :class:`Label` or ``None``
        :param x_label: 
        :type  x_labels: :class:`list` of :class:`Label` or ``None``
        :param x_labels: A list of X-Axis Labels with condition support. If needed, this
            property can be used to provide a list of x-axis label with
            condition support. For a label with single condition,'x-label'
            property can be used.
        :type  y_axis_unit_labels: :class:`list` of :class:`Label` or ``None``
        :param y_axis_unit_labels: A list of Y-Axis unit Labels with condition support. If needed,
            this property can be used to provide a list of y-axis unit label
            with condition support. This unit label can be used to display the
            point value along with units like percentage, milliseconds etc.
        :type  y_axis_units: :class:`list` of :class:`AxisUnit` or ``None``
        :param y_axis_units: A list of Y-Axis unit with condition support. If needed, this
            property can be used to provide a list of y-axis unit with
            condition support. This unit could be like percentage, seconds,
            milliseconds etc.
        :type  y_label: :class:`Label` or ``None``
        :param y_label: 
        :type  y_labels: :class:`list` of :class:`Label` or ``None``
        :param y_labels: A list of Y-Axis Labels with condition support. If needed, this
            property can be used to provide a list of y-axis label with
            condition support. For a label with single condition,'y-label'
            property can be used.
        """
        self.x_label = x_label
        self.x_labels = x_labels
        self.y_axis_unit_labels = y_axis_unit_labels
        self.y_axis_units = y_axis_units
        self.y_label = y_label
        self.y_labels = y_labels
        VapiStruct.__init__(self)


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



class AxisUnit(VapiStruct):
    """
    Represents X and Y axis unit of a graph.

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


    """
    UNIT_PERCENT = "PERCENT"
    """


    """
    UNIT_BYTES = "BYTES"
    """


    """
    UNIT_MILLISECONDS = "MILLISECONDS"
    """


    """
    UNIT_SECONDS = "SECONDS"
    """


    """
    UNIT_MINUTE = "MINUTE"
    """


    """
    UNIT_HOUR = "HOUR"
    """


    """
    UNIT_DAY = "DAY"
    """


    """
    UNIT_KILO_BYTES = "KILO_BYTES"
    """


    """
    UNIT_MEGA_BYTES = "MEGA_BYTES"
    """


    """
    UNIT_GIGA_BYTES = "GIGA_BYTES"
    """


    """



    _canonical_to_pep_names = {
                            'condition': 'condition',
                            'unit': 'unit',
                            }

    def __init__(self,
                 condition=None,
                 unit=None,
                ):
        """
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the above unit will be displayed. to
            UI. If no condition is provided, then the unit will be displayed
            unconditionally.
        :type  unit: :class:`str` or ``None``
        :param unit: Possible values are: 
            
            * :attr:`AxisUnit.UNIT_COUNT`
            * :attr:`AxisUnit.UNIT_PERCENT`
            * :attr:`AxisUnit.UNIT_BYTES`
            * :attr:`AxisUnit.UNIT_MILLISECONDS`
            * :attr:`AxisUnit.UNIT_SECONDS`
            * :attr:`AxisUnit.UNIT_MINUTE`
            * :attr:`AxisUnit.UNIT_HOUR`
            * :attr:`AxisUnit.UNIT_DAY`
            * :attr:`AxisUnit.UNIT_KILO_BYTES`
            * :attr:`AxisUnit.UNIT_MEGA_BYTES`
            * :attr:`AxisUnit.UNIT_GIGA_BYTES`
            
            An Axis unit.
        """
        self.condition = condition
        self.unit = unit
        VapiStruct.__init__(self)


AxisUnit._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.axis_unit', {
        'condition': type.OptionalType(type.StringType()),
        'unit': type.OptionalType(type.StringType()),
    },
    AxisUnit,
    False,
    None))



class BFDDiagnosticCount(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'administratively_down_count': 'administratively_down_count',
                            'concatenated_path_down_count': 'concatenated_path_down_count',
                            'control_detection_time_expired_count': 'control_detection_time_expired_count',
                            'echo_function_failed_count': 'echo_function_failed_count',
                            'forwarding_plane_reset_count': 'forwarding_plane_reset_count',
                            'neighbor_signaled_session_down_count': 'neighbor_signaled_session_down_count',
                            'no_diagnostic_count': 'no_diagnostic_count',
                            'path_down_count': 'path_down_count',
                            'reverse_concatenated_path_down_count': 'reverse_concatenated_path_down_count',
                            }

    def __init__(self,
                 administratively_down_count=None,
                 concatenated_path_down_count=None,
                 control_detection_time_expired_count=None,
                 echo_function_failed_count=None,
                 forwarding_plane_reset_count=None,
                 neighbor_signaled_session_down_count=None,
                 no_diagnostic_count=None,
                 path_down_count=None,
                 reverse_concatenated_path_down_count=None,
                ):
        """
        :type  administratively_down_count: :class:`long` or ``None``
        :param administratively_down_count: Number of tunnels with administratively down diagnostic message
            format: int64
        :type  concatenated_path_down_count: :class:`long` or ``None``
        :param concatenated_path_down_count: Number of tunnels with concatenated path down diagnostic message
            format: int64
        :type  control_detection_time_expired_count: :class:`long` or ``None``
        :param control_detection_time_expired_count: Number of tunnels with control detection time expired diagnostic
            message format: int64
        :type  echo_function_failed_count: :class:`long` or ``None``
        :param echo_function_failed_count: Number of tunnels with echo function failed diagnostic message
            format: int64
        :type  forwarding_plane_reset_count: :class:`long` or ``None``
        :param forwarding_plane_reset_count: Number of tunnels with forwarding plane reset diagnostic message
            format: int64
        :type  neighbor_signaled_session_down_count: :class:`long` or ``None``
        :param neighbor_signaled_session_down_count: Number of tunnels neighbor signaled session down format: int64
        :type  no_diagnostic_count: :class:`long` or ``None``
        :param no_diagnostic_count: Number of tunnels with no diagnostic format: int64
        :type  path_down_count: :class:`long` or ``None``
        :param path_down_count: Number of tunnels with path down diagnostic message format: int64
        :type  reverse_concatenated_path_down_count: :class:`long` or ``None``
        :param reverse_concatenated_path_down_count: Number of tunnels with reverse concatenated path down diagnostic
            message format: int64
        """
        self.administratively_down_count = administratively_down_count
        self.concatenated_path_down_count = concatenated_path_down_count
        self.control_detection_time_expired_count = control_detection_time_expired_count
        self.echo_function_failed_count = echo_function_failed_count
        self.forwarding_plane_reset_count = forwarding_plane_reset_count
        self.neighbor_signaled_session_down_count = neighbor_signaled_session_down_count
        self.no_diagnostic_count = no_diagnostic_count
        self.path_down_count = path_down_count
        self.reverse_concatenated_path_down_count = reverse_concatenated_path_down_count
        VapiStruct.__init__(self)


BFDDiagnosticCount._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.BFD_diagnostic_count', {
        'administratively_down_count': type.OptionalType(type.IntegerType()),
        'concatenated_path_down_count': type.OptionalType(type.IntegerType()),
        'control_detection_time_expired_count': type.OptionalType(type.IntegerType()),
        'echo_function_failed_count': type.OptionalType(type.IntegerType()),
        'forwarding_plane_reset_count': type.OptionalType(type.IntegerType()),
        'neighbor_signaled_session_down_count': type.OptionalType(type.IntegerType()),
        'no_diagnostic_count': type.OptionalType(type.IntegerType()),
        'path_down_count': type.OptionalType(type.IntegerType()),
        'reverse_concatenated_path_down_count': type.OptionalType(type.IntegerType()),
    },
    BFDDiagnosticCount,
    False,
    None))



class BFDProperties(VapiStruct):
    """
    BFD information

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


    """
    BFD_ENCAP_NONE = "NONE"
    """


    """
    BFD_ENCAP_UNKNOWN_ENCAP = "UNKNOWN_ENCAP"
    """


    """
    REMOTE_STATE_UNKNOWN_STATE = "UNKNOWN_STATE"
    """


    """
    REMOTE_STATE_ADMIN_DOWN = "ADMIN_DOWN"
    """


    """
    REMOTE_STATE_DOWN = "DOWN"
    """


    """
    REMOTE_STATE_INIT = "INIT"
    """


    """
    REMOTE_STATE_UP = "UP"
    """


    """
    STATE_UNKNOWN_STATE = "UNKNOWN_STATE"
    """


    """
    STATE_ADMIN_DOWN = "ADMIN_DOWN"
    """


    """
    STATE_DOWN = "DOWN"
    """


    """
    STATE_INIT = "INIT"
    """


    """
    STATE_UP = "UP"
    """


    """



    _canonical_to_pep_names = {
                            'active': 'active',
                            'bfd_encap': 'bfd_encap',
                            'diagnostic': 'diagnostic',
                            'forwarding': 'forwarding',
                            'remote_diagnostic': 'remote_diagnostic',
                            'remote_state': 'remote_state',
                            'state': 'state',
                            }

    def __init__(self,
                 active=None,
                 bfd_encap=None,
                 diagnostic=None,
                 forwarding=None,
                 remote_diagnostic=None,
                 remote_state=None,
                 state=None,
                ):
        """
        :type  active: :class:`bool` or ``None``
        :param active: True if tunnel is active in a gateway HA setup
            This 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_encap: :class:`str` or ``None``
        :param bfd_encap: Possible values are: 
            
            * :attr:`BFDProperties.BFD_ENCAP_GENEVE`
            * :attr:`BFDProperties.BFD_ENCAP_NONE`
            * :attr:`BFDProperties.BFD_ENCAP_UNKNOWN_ENCAP`
            
            The encapsulation type of BFD. GENEVE - BFD with GENEVE
            encapsulation NONE - BFD with no encapsulation UNKNOWN_ENCAP - BFD
            with unknown encapsulation
        :type  diagnostic: :class:`str` or ``None``
        :param diagnostic: A short message indicating what the BFD session thinks is wrong in
            case of a problem
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  forwarding: :class:`bool` or ``None``
        :param forwarding: True if the BFD session believes this interface may be used to
            forward 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  remote_diagnostic: :class:`str` or ``None``
        :param remote_diagnostic: A short message indicating what the remote interface's BFD session
            thinks is wrong in case of a problem
            This 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_state: :class:`str` or ``None``
        :param remote_state: Possible values are: 
            
            * :attr:`BFDProperties.REMOTE_STATE_UNKNOWN_STATE`
            * :attr:`BFDProperties.REMOTE_STATE_ADMIN_DOWN`
            * :attr:`BFDProperties.REMOTE_STATE_DOWN`
            * :attr:`BFDProperties.REMOTE_STATE_INIT`
            * :attr:`BFDProperties.REMOTE_STATE_UP`
            
            State of the remote interface's BFD 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  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`BFDProperties.STATE_UNKNOWN_STATE`
            * :attr:`BFDProperties.STATE_ADMIN_DOWN`
            * :attr:`BFDProperties.STATE_DOWN`
            * :attr:`BFDProperties.STATE_INIT`
            * :attr:`BFDProperties.STATE_UP`
            
            State of the BFD 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.
        """
        self.active = active
        self.bfd_encap = bfd_encap
        self.diagnostic = diagnostic
        self.forwarding = forwarding
        self.remote_diagnostic = remote_diagnostic
        self.remote_state = remote_state
        self.state = state
        VapiStruct.__init__(self)


BFDProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.BFD_properties', {
        'active': type.OptionalType(type.BooleanType()),
        'bfd_encap': type.OptionalType(type.StringType()),
        'diagnostic': type.OptionalType(type.StringType()),
        'forwarding': type.OptionalType(type.BooleanType()),
        'remote_diagnostic': type.OptionalType(type.StringType()),
        'remote_state': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    BFDProperties,
    False,
    None))



class BFDStatusCount(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'bfd_admin_down_count': 'bfd_admin_down_count',
                            'bfd_down_count': 'bfd_down_count',
                            'bfd_init_count': 'bfd_init_count',
                            'bfd_up_count': 'bfd_up_count',
                            }

    def __init__(self,
                 bfd_admin_down_count=None,
                 bfd_down_count=None,
                 bfd_init_count=None,
                 bfd_up_count=None,
                ):
        """
        :type  bfd_admin_down_count: :class:`long` or ``None``
        :param bfd_admin_down_count: Number of tunnels in BFD admin down state format: int32
        :type  bfd_down_count: :class:`long` or ``None``
        :param bfd_down_count: Number of tunnels in BFD down state format: int32
        :type  bfd_init_count: :class:`long` or ``None``
        :param bfd_init_count: Number of tunnels in BFD init state format: int32
        :type  bfd_up_count: :class:`long` or ``None``
        :param bfd_up_count: Number of tunnels in BFD up state format: int32
        """
        self.bfd_admin_down_count = bfd_admin_down_count
        self.bfd_down_count = bfd_down_count
        self.bfd_init_count = bfd_init_count
        self.bfd_up_count = bfd_up_count
        VapiStruct.__init__(self)


BFDStatusCount._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.BFD_status_count', {
        'bfd_admin_down_count': type.OptionalType(type.IntegerType()),
        'bfd_down_count': type.OptionalType(type.IntegerType()),
        'bfd_init_count': type.OptionalType(type.IntegerType()),
        'bfd_up_count': type.OptionalType(type.IntegerType()),
    },
    BFDStatusCount,
    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: 
            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: 
        """
        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.
    """
    OVERALL_BACKUP_STATUS_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    OVERALL_BACKUP_STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    OVERALL_BACKUP_STATUS_SUCCESS = "SUCCESS"
    """


    """
    OVERALL_BACKUP_STATUS_FAILED = "FAILED"
    """


    """



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

    def __init__(self,
                 cluster_backup_statuses=None,
                 inventory_backup_statuses=None,
                 node_backup_statuses=None,
                 overall_backup_status=None,
                ):
        """
        :type  cluster_backup_statuses: :class:`list` of :class:`BackupOperationStatus` or ``None``
        :param cluster_backup_statuses: Statuses of previous cluster 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
        :type  overall_backup_status: :class:`str` or ``None``
        :param overall_backup_status: Possible values are: 
            
            *
              :attr:`BackupOperationHistory.OVERALL_BACKUP_STATUS_NOT_AVAILABLE`
            * :attr:`BackupOperationHistory.OVERALL_BACKUP_STATUS_IN_PROGRESS`
            * :attr:`BackupOperationHistory.OVERALL_BACKUP_STATUS_SUCCESS`
            * :attr:`BackupOperationHistory.OVERALL_BACKUP_STATUS_FAILED`
            
            This attribute is used to indicate the overall backup status
        """
        self.cluster_backup_statuses = cluster_backup_statuses
        self.inventory_backup_statuses = inventory_backup_statuses
        self.node_backup_statuses = node_backup_statuses
        self.overall_backup_status = overall_backup_status
        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'))),
        'overall_backup_status': type.OptionalType(type.StringType()),
    },
    BackupOperationHistory,
    False,
    None))



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

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


    """
    ERROR_CODE_BACKUP_SERVER_UNREACHABLE = "BACKUP_SERVER_UNREACHABLE"
    """


    """
    ERROR_CODE_BACKUP_AUTHENTICATION_FAILURE = "BACKUP_AUTHENTICATION_FAILURE"
    """


    """
    ERROR_CODE_BACKUP_PERMISSION_ERROR = "BACKUP_PERMISSION_ERROR"
    """


    """
    ERROR_CODE_BACKUP_TIMEOUT = "BACKUP_TIMEOUT"
    """


    """
    ERROR_CODE_BACKUP_BAD_FINGERPRINT = "BACKUP_BAD_FINGERPRINT"
    """


    """
    ERROR_CODE_BACKUP_GENERIC_ERROR = "BACKUP_GENERIC_ERROR"
    """


    """
    ERROR_CODE_UPGRADE_IN_PROGRESS = "UPGRADE_IN_PROGRESS"
    """


    """



    _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_BACKUP_NOT_RUN_ON_MASTER`
            *
              :attr:`BackupOperationStatus.ERROR_CODE_BACKUP_SERVER_UNREACHABLE`
            *
              :attr:`BackupOperationStatus.ERROR_CODE_BACKUP_AUTHENTICATION_FAILURE`
            * :attr:`BackupOperationStatus.ERROR_CODE_BACKUP_PERMISSION_ERROR`
            * :attr:`BackupOperationStatus.ERROR_CODE_BACKUP_TIMEOUT`
            * :attr:`BackupOperationStatus.ERROR_CODE_BACKUP_BAD_FINGERPRINT`
            * :attr:`BackupOperationStatus.ERROR_CODE_BACKUP_GENERIC_ERROR`
            * :attr:`BackupOperationStatus.ERROR_CODE_UPGRADE_IN_PROGRESS`
            
            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_: 
        :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: 
        :type  backup_operation_history: :class:`BackupOperationHistory` or ``None``
        :param backup_operation_history: 
        :type  current_backup_operation_status: :class:`CurrentBackupOperationStatus` or ``None``
        :param current_backup_operation_status: 
        :type  restore_status: :class:`ClusterRestoreStatus` or ``None``
        :param restore_status: 
        """
        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 BaseCompatibilityCheckResult(VapiStruct):
    """
    Precheck result for onboaring standby Global Manager or remote Site to
    federation description: | Result of prechecks run for onboarding standby
    Global Manager or remote site. The checks include NSX version compatibility
    with active Global Manager, Round Trip Time (RTT), etc. Note that some of
    checks like RTT are soft limits.

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



    _canonical_to_pep_names = {
                            'local_nsx_version': 'local_nsx_version',
                            'nsx_version': 'nsx_version',
                            'rtt': 'rtt',
                            'rtt_exceeded': 'rtt_exceeded',
                            'version_compatible': 'version_compatible',
                            }

    def __init__(self,
                 local_nsx_version=None,
                 nsx_version=None,
                 rtt=None,
                 rtt_exceeded=None,
                 version_compatible=None,
                ):
        """
        :type  local_nsx_version: :class:`str` or ``None``
        :param local_nsx_version: Local Site NSX version where active Global Mananger is running.
            This 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_version: :class:`str` or ``None``
        :param nsx_version: Remote Site NSX 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  rtt: :class:`long` or ``None``
        :param rtt: Round trip time to the remote Site or Global Manager from active
            Global Manager. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rtt_exceeded: :class:`bool` or ``None``
        :param rtt_exceeded: Flag to indicate if RTT to remote Site exceeds the recommended
            limit.
            This 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_compatible: :class:`bool` or ``None``
        :param version_compatible: Flag to indicate if remote Site NSX version is compatible with
            active 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.
        """
        self.local_nsx_version = local_nsx_version
        self.nsx_version = nsx_version
        self.rtt = rtt
        self.rtt_exceeded = rtt_exceeded
        self.version_compatible = version_compatible
        VapiStruct.__init__(self)


BaseCompatibilityCheckResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_compatibility_check_result', {
        'local_nsx_version': type.OptionalType(type.StringType()),
        'nsx_version': type.OptionalType(type.StringType()),
        'rtt': type.OptionalType(type.IntegerType()),
        'rtt_exceeded': type.OptionalType(type.BooleanType()),
        'version_compatible': type.OptionalType(type.BooleanType()),
    },
    BaseCompatibilityCheckResult,
    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: 
        :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: 
        :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 BaseCountObservation(VapiStruct):
    """
    The count action results from aggregating checkpoints per port.

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



    _canonical_to_pep_names = {
                            'checkpoints': 'checkpoints',
                            'port_id': 'port_id',
                            'port_name': 'port_name',
                            'transport_node_id': 'transport_node_id',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 checkpoints=None,
                 port_id=None,
                 port_name=None,
                 transport_node_id=None,
                 resource_type=None,
                ):
        """
        :type  checkpoints: :class:`CheckpointCounterResult` or ``None``
        :param checkpoints: 
        :type  port_id: :class:`str` or ``None``
        :param port_id: The port identifier in UUID format. This field won't appear
            together with port_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  port_name: :class:`str` or ``None``
        :param port_name: The port name for a port. It applies to ports like the uplink port.
            This field won't appear together with port_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  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: This field tells which transport node the checkpoints are reported
            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  resource_type: :class:`str`
        :param resource_type: Type of count observation
        """
        self.checkpoints = checkpoints
        self.port_id = port_id
        self.port_name = port_name
        self.transport_node_id = transport_node_id
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

BaseCountObservation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_count_observation', {
        'checkpoints': type.OptionalType(type.ReferenceType(__name__, 'CheckpointCounterResult')),
        'port_id': type.OptionalType(type.StringType()),
        'port_name': type.OptionalType(type.StringType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    BaseCountObservation,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 BaseInterfaceGroup(VapiStruct):
    """
    Tier0/Tier1 Interface group for interface grouping.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`GatewayInterfaceReference` or ``None``
        :param members: List of interface reference. Interface must belong to same
            location.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


BaseInterfaceGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_interface_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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.ReferenceType(__name__, 'GatewayInterfaceReference'))),
    },
    BaseInterfaceGroup,
    False,
    None))



class BasePktCapResource(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "BasePktCapResource"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='BasePktCapResource',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Type of packet capture resource
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

BasePktCapResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_pkt_cap_resource', {
        'resource_type': type.StringType(),
    },
    BasePktCapResource,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate the rule. Default is activated.
        :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 deactivated.
        :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. Instead of Layer 7 service profiles you can use a L7
            access profile. One of either Layer 7 service profiles or L7 Access
            Profile can be used in firewall rule. In case of L7 access profile
            only one is allowed.
        :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. Even
            though there is no limitation on length of a tag, internally tag
            will get truncated after 32 characters.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dhcp_relay_path': 'dhcp_relay_path',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dhcp_relay_path=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  dhcp_relay_path: :class:`str` or ``None``
        :param dhcp_relay_path: Policy path of dhcp-relay-config to be attached to this Interface.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dhcp_relay_path = dhcp_relay_path
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'dhcp_relay_path': type.OptionalType(type.StringType()),
        '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: Continue even if an error is encountered.
        :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 BfdHealthMonitoringConfig(VapiStruct):
    """
    Bfd Health Monitoring Options used specific to BFD Transport Zone profiles

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



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'latency_enabled': 'latency_enabled',
                            'probe_interval': 'probe_interval',
                            }

    def __init__(self,
                 enabled=None,
                 latency_enabled=None,
                 probe_interval=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Whether the heartbeat is enabled. A PATCH or PUT request with
            \"enabled\" false (with no probe intervals) will set or reset the
            probe_interval to their default value.
        :type  latency_enabled: :class:`bool` or ``None``
        :param latency_enabled: The flag is to turn on/off latency. A PATCH or PUT request with
            \"latency_enabled\" true will enable NSX to send the networking
            latency data to thrid-party monitoring tools like vRNI.
        :type  probe_interval: :class:`long` or ``None``
        :param probe_interval: The time interval (in millisec) between probe packets for tunnels
            between transport nodes. format: int64
        """
        self.enabled = enabled
        self.latency_enabled = latency_enabled
        self.probe_interval = probe_interval
        VapiStruct.__init__(self)


BfdHealthMonitoringConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bfd_health_monitoring_config', {
        'enabled': type.OptionalType(type.BooleanType()),
        'latency_enabled': type.OptionalType(type.BooleanType()),
        'probe_interval': type.OptionalType(type.IntegerType()),
    },
    BfdHealthMonitoringConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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: 
        """
        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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'allow_as_in': 'allow_as_in',
                            'bfd': 'bfd',
                            'enabled': 'enabled',
                            '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',
                            'neighbor_local_as_config': 'neighbor_local_as_config',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 allow_as_in=None,
                 bfd=None,
                 enabled=None,
                 graceful_restart_mode=None,
                 hold_down_time=None,
                 in_route_filters=None,
                 keep_alive_time=None,
                 maximum_hop_limit=None,
                 neighbor_address=None,
                 neighbor_local_as_config=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable/disable BGP peering. Disabling will stop the BGP
            peering. True - indicates enable BGP peering, False - indicates
            disable BGP peering. Default is True.
        :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.

            .. deprecated:: unknown
        :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  neighbor_local_as_config: :class:`BgpNeighborLocalAsConfig` or ``None``
        :param neighbor_local_as_config: 
        :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.

            .. deprecated:: unknown
        :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 or VTI
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.enabled = enabled
        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.neighbor_local_as_config = neighbor_local_as_config
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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')),
        'enabled': type.OptionalType(type.BooleanType()),
        '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()),
        'neighbor_local_as_config': type.OptionalType(type.ReferenceType(__name__, 'BgpNeighborLocalAsConfig')),
        '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_: 
        :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 BgpNeighborLocalAsConfig(VapiStruct):
    """
    BGP neighbor local-as configuration

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


    """
    AS_PATH_MODIFIER_TYPE_PREPEND_REPLACE_AS = "NO_PREPEND_REPLACE_AS"
    """


    """



    _canonical_to_pep_names = {
                            'as_path_modifier_type': 'as_path_modifier_type',
                            'local_as_num': 'local_as_num',
                            }

    def __init__(self,
                 as_path_modifier_type=None,
                 local_as_num=None,
                ):
        """
        :type  as_path_modifier_type: :class:`str` or ``None``
        :param as_path_modifier_type: Possible values are: 
            
            * :attr:`BgpNeighborLocalAsConfig.AS_PATH_MODIFIER_TYPE_PREPEND`
            *
              :attr:`BgpNeighborLocalAsConfig.AS_PATH_MODIFIER_TYPE_PREPEND_REPLACE_AS`
            
            Optional parameter. If this property is not set, by default BGP
            prepends neighbor's local_as_num value to the AS_PATH for BOTH
            outgoing and incoming route advertisements from the peer neighbor.
            By setting one of the following value, user can modify the default
            prepend action on the AS_PATH in both inbound and outbound
            direction. NO_PREPEND: If type is NO_PREPEND, then the local router
            will NOT prepend the incoming advertisement from that peer with
            neighbor's local_as_num, so the AS path advertised will now prepend
            only the BGP local-as of the router. NO_PREPEND_REPLACE_AS - If
            type is \"NO_PREPEND_REPLACE_AS\", then the local routes will be
            advertised with the neighbor's local-as instead of the BGP's
            local-as to peer router.
        :type  local_as_num: :class:`str` or ``None``
        :param local_as_num: 
        """
        self.as_path_modifier_type = as_path_modifier_type
        self.local_as_num = local_as_num
        VapiStruct.__init__(self)


BgpNeighborLocalAsConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_neighbor_local_as_config', {
        'as_path_modifier_type': type.OptionalType(type.StringType()),
        'local_as_num': type.OptionalType(type.StringType()),
    },
    BgpNeighborLocalAsConfig,
    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 = {
                            'edge_node_routes': 'edge_node_routes',
                            'egde_node_routes': 'egde_node_routes',
                            'enforcement_point_path': 'enforcement_point_path',
                            'neighbor_path': 'neighbor_path',
                            }

    def __init__(self,
                 edge_node_routes=None,
                 egde_node_routes=None,
                 enforcement_point_path=None,
                 neighbor_path=None,
                ):
        """
        :type  edge_node_routes: :class:`list` of :class:`RoutesPerTransportNode` or ``None``
        :param edge_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  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.

            .. deprecated:: unknown
        :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.edge_node_routes = edge_node_routes
        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', {
        'edge_node_routes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RoutesPerTransportNode'))),
        '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_: 
        :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 BgpRouteLeaking(VapiStruct):
    """
    BGP route leaking in each direction

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


    """
    ADDRESS_FAMILY_IPV6 = "IPV6"
    """


    """



    _canonical_to_pep_names = {
                            'address_family': 'address_family',
                            'in_filter': 'in_filter',
                            'out_filter': 'out_filter',
                            }

    def __init__(self,
                 address_family=None,
                 in_filter=None,
                 out_filter=None,
                ):
        """
        :type  address_family: :class:`str` or ``None``
        :param address_family: Possible values are: 
            
            * :attr:`BgpRouteLeaking.ADDRESS_FAMILY_IPV4`
            * :attr:`BgpRouteLeaking.ADDRESS_FAMILY_IPV6`
            
            Address family type. Assumed IPv4 address family when not
            specified.
        :type  in_filter: :class:`list` of :class:`str` or ``None``
        :param in_filter: Specify path of route map to filter routes for IN direction. If not
            specified then all exported routes from peer attachment will be
            imported.
        :type  out_filter: :class:`list` of :class:`str` or ``None``
        :param out_filter: Specify path of route map to filter routes for OUT direction. If
            not specified then all redistribute routes will be exported.
        """
        self.address_family = address_family
        self.in_filter = in_filter
        self.out_filter = out_filter
        VapiStruct.__init__(self)


BgpRouteLeaking._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_route_leaking', {
        'address_family': type.OptionalType(type.StringType()),
        'in_filter': type.OptionalType(type.ListType(type.StringType())),
        'out_filter': type.OptionalType(type.ListType(type.StringType())),
    },
    BgpRouteLeaking,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ebgp_admin_distance': 'ebgp_admin_distance',
                            'ecmp': 'ecmp',
                            'enabled': 'enabled',
                            'graceful_restart': 'graceful_restart',
                            'graceful_restart_config': 'graceful_restart_config',
                            'ibgp_admin_distance': 'ibgp_admin_distance',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ebgp_admin_distance=None,
                 ecmp=None,
                 enabled=None,
                 graceful_restart=None,
                 graceful_restart_config=None,
                 ibgp_admin_distance=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  ebgp_admin_distance: :class:`long` or ``None``
        :param ebgp_admin_distance: Administrative distance for IPv4 and IPv6 eBGP learnt
            routes(inbound). User is allowed to set this value only if BGP is
            disabled. format: int32
        :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.

            .. deprecated:: unknown
        :type  graceful_restart_config: :class:`BgpGracefulRestartConfig` or ``None``
        :param graceful_restart_config: 
        :type  ibgp_admin_distance: :class:`long` or ``None``
        :param ibgp_admin_distance: Administrative distance for IPv4 and IPv6 iBGP learnt
            routes(inbound). User is allowed to set this value only if BGP is
            disabled. format: int32
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ebgp_admin_distance = ebgp_admin_distance
        self.ecmp = ecmp
        self.enabled = enabled
        self.graceful_restart = graceful_restart
        self.graceful_restart_config = graceful_restart_config
        self.ibgp_admin_distance = ibgp_admin_distance
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'ebgp_admin_distance': type.OptionalType(type.IntegerType()),
        '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')),
        'ibgp_admin_distance': type.OptionalType(type.IntegerType()),
        '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: When this flag is set, traceflow packet will have its destination
            overwritten as the gateway address of the logical router to which
            the source logical switch is connected. More specifically: - For
            ARP request, the target IP will be overwritten as gateway IP if the
            target IP is not in the same subnet of gateway. - For ARP response,
            the target IP and destination MAC will be overwritten as gateway
            IP/MAC respectively, if the target IP is not in the same subnet of
            gateway. - For IP packet, the destination MAC will be overwritten
            as gateway MAC. However, this flag will not be effective when
            injecting the traceflow packet to a VLAN backed port. This is
            because the gateway in this case is a physical gateway that is
            outside the scope of NSX. Therefore, users need to manually
            populate the gateway MAC address. If the user still sets this flag
            in this case, a validation error will be thrown.
        :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`
            
            This type takes effect only for IP 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 BondPnicStatus(VapiStruct):
    """
    pNIC/bond statuses

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


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    TYPE_UNKNOWN_TYPE = "UNKNOWN_TYPE"
    """


    """
    TYPE_PNIC = "PNIC"
    """


    """
    TYPE_BOND = "BOND"
    """


    """



    _canonical_to_pep_names = {
                            'name': 'name',
                            'status': 'status',
                            'type': 'type',
                            }

    def __init__(self,
                 name=None,
                 status=None,
                 type=None,
                ):
        """
        :type  name: :class:`str` or ``None``
        :param name: Name of the pNIC/bond
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`BondPnicStatus.STATUS_UNKNOWN`
            * :attr:`BondPnicStatus.STATUS_UP`
            * :attr:`BondPnicStatus.STATUS_DOWN`
            * :attr:`BondPnicStatus.STATUS_DEGRADED`
            
            Status of pNIC/bond
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`BondPnicStatus.TYPE_UNKNOWN_TYPE`
            * :attr:`BondPnicStatus.TYPE_PNIC`
            * :attr:`BondPnicStatus.TYPE_BOND`
            
            Type, whether the object is a pNIC or a bond
        """
        self.name = name
        self.status = status
        self.type = type
        VapiStruct.__init__(self)


BondPnicStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bond_pnic_status', {
        'name': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    BondPnicStatus,
    False,
    None))



class BridgeEndpointStatistics(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',
                            'endpoint_id': 'endpoint_id',
                            'last_update_timestamp': 'last_update_timestamp',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 endpoint_id=None,
                 last_update_timestamp=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  endpoint_id: :class:`str` or ``None``
        :param endpoint_id: The id of the bridge endpoint
            This attribute 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.endpoint_id = endpoint_id
        self.last_update_timestamp = last_update_timestamp
        VapiStruct.__init__(self)


BridgeEndpointStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bridge_endpoint_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')),
        'endpoint_id': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
    },
    BridgeEndpointStatistics,
    False,
    None))



class BridgeEndpointStatus(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'active_nodes': 'active_nodes',
                            'endpoint_id': 'endpoint_id',
                            'last_update_timestamp': 'last_update_timestamp',
                            }

    def __init__(self,
                 active_nodes=None,
                 endpoint_id=None,
                 last_update_timestamp=None,
                ):
        """
        :type  active_nodes: :class:`list` of :class:`str` or ``None``
        :param active_nodes: The Ids of the transport nodes which actively serve the endpoint.
            This 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_id: :class:`str` or ``None``
        :param endpoint_id: The id of the bridge endpoint
            This attribute 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.active_nodes = active_nodes
        self.endpoint_id = endpoint_id
        self.last_update_timestamp = last_update_timestamp
        VapiStruct.__init__(self)


BridgeEndpointStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bridge_endpoint_status', {
        'active_nodes': type.OptionalType(type.ListType(type.StringType())),
        'endpoint_id': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
    },
    BridgeEndpointStatus,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 CaBundle(VapiStruct):
    """
    CA certificates bundle

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'certificates': 'certificates',
                            'earliest_not_after': 'earliest_not_after',
                            'not_after_list': 'not_after_list',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 certificates=None,
                 earliest_not_after=None,
                 not_after_list=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  certificates: :class:`list` of :class:`X509Certificate` or ``None``
        :param certificates: X509Certificates in the bundle
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  earliest_not_after: :class:`long` or ``None``
        :param earliest_not_after: The earliest time in epoch milliseconds at which a 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_after_list: :class:`list` of :class:`long` or ``None``
        :param not_after_list: Times for each certificate in the bundle 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  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: PEM-encoded CA bundle 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.certificates = certificates
        self.earliest_not_after = earliest_not_after
        self.not_after_list = not_after_list
        self.pem_encoded = pem_encoded
        VapiStruct.__init__(self)


CaBundle._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ca_bundle', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'certificates': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'X509Certificate'))),
        'earliest_not_after': type.OptionalType(type.IntegerType()),
        'not_after_list': type.OptionalType(type.ListType(type.IntegerType())),
        'pem_encoded': type.OptionalType(type.StringType()),
    },
    CaBundle,
    False,
    None))



class CaBundleListResult(VapiStruct):
    """
    CA Bundle query 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_: 
        :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:`CaBundle` or ``None``
        :param results: CA bundles 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)


CaBundleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ca_bundle_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__, 'CaBundle'))),
    },
    CaBundleListResult,
    False,
    None))



class CapacityDashboardUsage(VapiStruct):
    """


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


    """
    SEVERITY_WARNING = "WARNING"
    """


    """
    SEVERITY_CRITICAL = "CRITICAL"
    """


    """
    SEVERITY_ERROR = "ERROR"
    """


    """



    _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',
                            'max_threshold_percentage': 'max_threshold_percentage',
                            'min_threshold_percentage': 'min_threshold_percentage',
                            'severity': 'severity',
                            'usage_type': 'usage_type',
                            }

    def __init__(self,
                 current_usage_count=None,
                 current_usage_percentage=None,
                 display_name=None,
                 max_supported_count=None,
                 max_threshold_percentage=None,
                 min_threshold_percentage=None,
                 severity=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  max_threshold_percentage: :class:`float` or ``None``
        :param max_threshold_percentage: This indicates the maximum threshold percentage for object type.
        :type  min_threshold_percentage: :class:`float` or ``None``
        :param min_threshold_percentage: This indicates the minimum threshold percentage for object type.
        :type  severity: :class:`str` or ``None``
        :param severity: Possible values are: 
            
            * :attr:`CapacityDashboardUsage.SEVERITY_INFO`
            * :attr:`CapacityDashboardUsage.SEVERITY_WARNING`
            * :attr:`CapacityDashboardUsage.SEVERITY_CRITICAL`
            * :attr:`CapacityDashboardUsage.SEVERITY_ERROR`
            
            Severity calculated from percentage usage
        :type  usage_type: :class:`str` or ``None``
        :param usage_type: 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.max_threshold_percentage = max_threshold_percentage
        self.min_threshold_percentage = min_threshold_percentage
        self.severity = severity
        self.usage_type = usage_type
        VapiStruct.__init__(self)


CapacityDashboardUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.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()),
        'max_threshold_percentage': type.OptionalType(type.DoubleType()),
        'min_threshold_percentage': type.OptionalType(type.DoubleType()),
        'severity': type.OptionalType(type.StringType()),
        'usage_type': type.OptionalType(type.StringType()),
    },
    CapacityDashboardUsage,
    False,
    None))



class CapacityThreshold(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'max_threshold_percentage': 'max_threshold_percentage',
                            'min_threshold_percentage': 'min_threshold_percentage',
                            'threshold_type': 'threshold_type',
                            }

    def __init__(self,
                 max_threshold_percentage=None,
                 min_threshold_percentage=None,
                 threshold_type=None,
                ):
        """
        :type  max_threshold_percentage: :class:`float` or ``None``
        :param max_threshold_percentage: Set the maximum threshold percentage. Specify a value between 0 and
            100. Usage percentage above this value is tagged as critical.
        :type  min_threshold_percentage: :class:`float` or ``None``
        :param min_threshold_percentage: Set the minimum threshold percentage. Specify a value between 0 and
            100. Usage percentage above this value is tagged as warning.
        :type  threshold_type: :class:`str` or ``None``
        :param threshold_type: Indicate the object type for which threshold is to be set.
        """
        self.max_threshold_percentage = max_threshold_percentage
        self.min_threshold_percentage = min_threshold_percentage
        self.threshold_type = threshold_type
        VapiStruct.__init__(self)


CapacityThreshold._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.capacity_threshold', {
        'max_threshold_percentage': type.OptionalType(type.DoubleType()),
        'min_threshold_percentage': type.OptionalType(type.DoubleType()),
        'threshold_type': type.OptionalType(type.StringType()),
    },
    CapacityThreshold,
    False,
    None))



class CapacityThresholdList(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_thresholds': 'capacity_thresholds',
                            }

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


CapacityThresholdList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.capacity_threshold_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'))),
        'capacity_thresholds': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CapacityThreshold'))),
    },
    CapacityThresholdList,
    False,
    None))



class CapacityUsageMetaInfo(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'last_updated_timestamp': 'last_updated_timestamp',
                            'max_global_threshold_percentage': 'max_global_threshold_percentage',
                            'min_global_threshold_percentage': 'min_global_threshold_percentage',
                            }

    def __init__(self,
                 last_updated_timestamp=None,
                 max_global_threshold_percentage=None,
                 min_global_threshold_percentage=None,
                ):
        """
        :type  last_updated_timestamp: :class:`long` or ``None``
        :param last_updated_timestamp: Timestamp at which capacity usage was last calculated format: int64
        :type  max_global_threshold_percentage: :class:`float` or ``None``
        :param max_global_threshold_percentage: Indicates the maximum global threshold percentage
        :type  min_global_threshold_percentage: :class:`float` or ``None``
        :param min_global_threshold_percentage: Indicates the minimum global threshold percentage
        """
        self.last_updated_timestamp = last_updated_timestamp
        self.max_global_threshold_percentage = max_global_threshold_percentage
        self.min_global_threshold_percentage = min_global_threshold_percentage
        VapiStruct.__init__(self)


CapacityUsageMetaInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.capacity_usage_meta_info', {
        'last_updated_timestamp': type.OptionalType(type.IntegerType()),
        'max_global_threshold_percentage': type.OptionalType(type.DoubleType()),
        'min_global_threshold_percentage': type.OptionalType(type.DoubleType()),
    },
    CapacityUsageMetaInfo,
    False,
    None))



class CapacityUsageResponse(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',
                            'meta_info': 'meta_info',
                            'unreported_usage_types': 'unreported_usage_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,
                 capacity_usage=None,
                 meta_info=None,
                 unreported_usage_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`CapacityDashboardUsage` or ``None``
        :param capacity_usage: List of capacity usage for NSX Objects
        :type  meta_info: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param meta_info: Meta data for capacity usage statistics
        :type  unreported_usage_types: :class:`list` of :class:`str` or ``None``
        :param unreported_usage_types: Types for which usage data was not reported
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.meta_info = meta_info
        self.unreported_usage_types = unreported_usage_types
        VapiStruct.__init__(self)


CapacityUsageResponse._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.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__, 'CapacityDashboardUsage'))),
        'meta_info': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'unreported_usage_types': type.OptionalType(type.ListType(type.StringType())),
    },
    CapacityUsageResponse,
    False,
    None))



class CheckpointCounter(VapiStruct):
    """


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


    """
    CHECKPOINT_TYPE_PORT_INPUT = "PORT_INPUT"
    """


    """
    CHECKPOINT_TYPE_PORT_OUTPUT = "PORT_OUTPUT"
    """


    """
    CHECKPOINT_TYPE_SPOOFGUARD_INPUT = "SPOOFGUARD_INPUT"
    """


    """
    CHECKPOINT_TYPE_SPOOFGUARD_OUTPUT = "SPOOFGUARD_OUTPUT"
    """


    """
    CHECKPOINT_TYPE_SPOOFGUARD_DROP = "SPOOFGUARD_DROP"
    """


    """
    CHECKPOINT_TYPE_DFW_INPUT = "DFW_INPUT"
    """


    """
    CHECKPOINT_TYPE_DFW_OUTPUT = "DFW_OUTPUT"
    """


    """
    CHECKPOINT_TYPE_DFW_DROP = "DFW_DROP"
    """


    """
    CHECKPOINT_TYPE_UPLINK_INPUT = "UPLINK_INPUT"
    """


    """
    CHECKPOINT_TYPE_UPLINK_OUTPUT = "UPLINK_OUTPUT"
    """


    """
    CHECKPOINT_TYPE_ENS_PORT_INPUT = "ENS_PORT_INPUT"
    """


    """
    CHECKPOINT_TYPE_ENS_PORT_OUTPUT = "ENS_PORT_OUTPUT"
    """


    """
    CHECKPOINT_TYPE_ENS_UPLINK_INPUT = "ENS_UPLINK_INPUT"
    """


    """
    CHECKPOINT_TYPE_ENS_UPLINK_OUTPUT = "ENS_UPLINK_OUTPUT"
    """


    """
    CHECKPOINT_TYPE_ENS_DFW_INPUT = "ENS_DFW_INPUT"
    """


    """
    CHECKPOINT_TYPE_ENS_DFW_OUTPUT = "ENS_DFW_OUTPUT"
    """


    """
    CHECKPOINT_TYPE_ENS_DFW_DROP = "ENS_DFW_DROP"
    """


    """
    CHECKPOINT_TYPE_ROUTER_DROP = "ROUTER_DROP"
    """


    """



    _canonical_to_pep_names = {
                            'checkpoint_type': 'checkpoint_type',
                            'count': 'count',
                            }

    def __init__(self,
                 checkpoint_type=None,
                 count=None,
                ):
        """
        :type  checkpoint_type: :class:`str` or ``None``
        :param checkpoint_type: Possible values are: 
            
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_UNKNOWN`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_PORT_INPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_PORT_OUTPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_SPOOFGUARD_INPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_SPOOFGUARD_OUTPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_SPOOFGUARD_DROP`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_DFW_INPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_DFW_OUTPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_DFW_DROP`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_UPLINK_INPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_UPLINK_OUTPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ENS_PORT_INPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ENS_PORT_OUTPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ENS_UPLINK_INPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ENS_UPLINK_OUTPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ENS_DFW_INPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ENS_DFW_OUTPUT`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ENS_DFW_DROP`
            * :attr:`CheckpointCounter.CHECKPOINT_TYPE_ROUTER_DROP`
            
            Type of Livetrace checkpoint. UNKNOWN - Unknown checkpoint.
            PORT_INPUT - Received by a port on slowpath. The first slowpath
            checkpoint is encountered when the packet enters a certain port.
            For a certain port, a series of subsequent checkpoints is usually
            encountered after the packet traverses through PORT_INPUT.
            PORT_OUTPUT - Forwarded to a port on slowpath. The last slowpath
            checkpoint is encountered when the packet left a certain port. For
            a certain port, a series of checkpoints is usually encountered
            before the packet traverses through PORT_OUTPUT. SPOOFGUARD_INPUT -
            Received by slowpath Spoofguard service. This checkpoint should be
            encountered either after the packet encounters PORT_INPUT or before
            the packet encounters PORT_OUTPUT. SPOOFGUARD_OUTPUT - Forwarded
            from slowpath Spoofguard service. This checkpoint should be
            encountered after SPOOFGUARD_INPUT. SPOOFUGARD_DROP - Dropped by
            slowpath Spoofguard service. This checkpoint should be encountered
            after SPOOFGUARD_INPUT. DFW_INPUT - Received by slowpath DFW
            service. This checkpoint should be encountered encountered either
            after the packet encounters PORT_INPUT or before the packet
            encounters PORT_OUTPUT. This checkpoint should after SPOOFGUARD
            related checkpoints, if they exist. DFW_OUTPUT - Forwarded from
            slowpath DFW service. This checkpoint should be encountered after
            DFW_INPUT. DFW_DROP - Dropped by slowpath DFW service.This
            checkpoint should be encountered after DFW_INPUT. UPLINK_INPUT -
            Ingressed via an uplink port on slowpath. The first slowpath
            checkpoint is encountered when the packet ingress from external
            network via an uplink. UPLINK_OUTPUT - Egressed via an uplink port
            on slowpath. The last slowpath checkpoint is encountered when the
            packet egress to external network via an uplink. ENS_PORT_INPUT -
            Received by a port on ENS fastpath. The first ENS fastpath
            checkpoint is encountered when the packet enters a certain port.
            ENS_PORT_OUTPUT - Forwarded to a port on ENS fastpath. The last ENS
            fastpath checkpoint is encountered when the packet left a certain
            port. ENS_UPLINK_INPUT - Ingressed via an uplink port on ENS
            fastpath. The first ENS fastpath checkpoint is encountered when the
            packet ingress from external network via an uplink.
            ENS_UPLINK_OUTPUT - Egressed via an uplink port on ENS fastpath.
            The last ENS fastpath checkpoint is encountered when the packet
            egress to external network via an uplink. ENS_DFW_INPUT - Received
            by ENS fastpath DFW service. This checkpoint should be encountered
            after ENS_PORT_INPUT. ENS_DFW_OUTPUT - Forwarded from ENS fastpath
            DFW service. This checkpoint should be encountered after
            ENS_DFW_INPUT. ENS_DFW_DROP - Dropped by ENS fastpath DFW service.
            This checkpoint should be encountered after ENS_DFW_INPUT.
            ROUTER_DROP - Dropped by slowpath router service. This checkpoint
            should be encountered after PORT_INPUT.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  count: :class:`long` or ``None``
        :param count: The number of packets traversed by this checkpoint. The packet
            connectivity issue can be discovered by comparing the count value
            of different checkpoints. format: int64
            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.checkpoint_type = checkpoint_type
        self.count = count
        VapiStruct.__init__(self)


CheckpointCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.checkpoint_counter', {
        'checkpoint_type': type.OptionalType(type.StringType()),
        'count': type.OptionalType(type.IntegerType()),
    },
    CheckpointCounter,
    False,
    None))



class CheckpointCounterResult(VapiStruct):
    """
    The packets that only have the count action (other permutations such as
    trace + pktcap or count + trace/pktcap cannot) can traverse through the ENS
    fastpath. Therefore, two checkpoint results from ENS fastpath and slowpath
    are listed below.

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



    _canonical_to_pep_names = {
                            'ens_checkpoints_result': 'ens_checkpoints_result',
                            'non_ens_checkpoints_result': 'non_ens_checkpoints_result',
                            }

    def __init__(self,
                 ens_checkpoints_result=None,
                 non_ens_checkpoints_result=None,
                ):
        """
        :type  ens_checkpoints_result: :class:`list` of :class:`CheckpointCounter` or ``None``
        :param ens_checkpoints_result: The counter result from ENS checkpoints
            This 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_ens_checkpoints_result: :class:`list` of :class:`CheckpointCounter` or ``None``
        :param non_ens_checkpoints_result: The counter result from non ENS checkpoints
            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.ens_checkpoints_result = ens_checkpoints_result
        self.non_ens_checkpoints_result = non_ens_checkpoints_result
        VapiStruct.__init__(self)


CheckpointCounterResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.checkpoint_counter_result', {
        'ens_checkpoints_result': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CheckpointCounter'))),
        'non_ens_checkpoints_result': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CheckpointCounter'))),
    },
    CheckpointCounterResult,
    False,
    None))



class ChildAntreaTraceflowConfig(VapiStruct):
    """
    Child wrapper for AntreaTraceflowConfig, used in hierarchical API.

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



    _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',
                            'request_parameter': 'request_parameter',
                            }

    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=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  traceflow_config: :class:`AntreaTraceflowConfig` or ``None``
        :param traceflow_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildAntreaTraceflowConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_antrea_traceflow_config', {
        'TraceflowConfig': type.OptionalType(type.ReferenceType(__name__, 'AntreaTraceflowConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildAntreaTraceflowConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  bfd_profile: :class:`BfdProfile` or ``None``
        :param bfd_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  bgp_neighbor_config: :class:`BgpNeighborConfig` or ``None``
        :param bgp_neighbor_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  bgp_routing_config: :class:`BgpRoutingConfig` or ``None``
        :param bgp_routing_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  byod_policy_service_instance: :class:`ByodPolicyServiceInstance` or ``None``
        :param byod_policy_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildByodPolicyServiceInstance,
    False,
    None))



class ChildCaBundle(VapiStruct):
    """
    Child wrapper for CA certificates bundle, used in hierarchical API.

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



    _canonical_to_pep_names = {
                            'CaBundle': 'ca_bundle',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ca_bundle=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,
                 request_parameter=None,
                ):
        """
        :type  ca_bundle: :class:`CaBundle` or ``None``
        :param ca_bundle: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ca_bundle = ca_bundle
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildCaBundle._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ca_bundle', {
        'CaBundle': type.OptionalType(type.ReferenceType(__name__, 'CaBundle')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildCaBundle,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  communication_entry: :class:`CommunicationEntry` or ``None``
        :param communication_entry: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  communication_map: :class:`CommunicationMap` or ``None``
        :param communication_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  community_list: :class:`CommunityList` or ``None``
        :param community_list: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  compute_cluster_idfw_configuration: :class:`ComputeClusterIdfwConfiguration` or ``None``
        :param compute_cluster_idfw_configuration: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  constraint: :class:`Constraint` or ``None``
        :param constraint: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildConstraint,
    False,
    None))



class ChildConstraintGlobalConfig(VapiStruct):
    """
    Child wrapper object for ConstraintGlobalConfig, 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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  global_config: :class:`ConstraintGlobalConfig` or ``None``
        :param global_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildConstraintGlobalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_constraint_global_config', {
        'GlobalConfig': type.OptionalType(type.ReferenceType(__name__, 'ConstraintGlobalConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildConstraintGlobalConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  deployment_zone: :class:`DeploymentZone` or ``None``
        :param deployment_zone: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  dfw_firewall_configuration: :class:`DfwFirewallConfiguration` or ``None``
        :param dfw_firewall_configuration: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  dhcp_relay_config: :class:`DhcpRelayConfig` or ``None``
        :param dhcp_relay_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  dhcp_server_config: :class:`DhcpServerConfig` or ``None``
        :param dhcp_server_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  dhcp_static_binding_config: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param dhcp_static_binding_config: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  dns_security_profile: :class:`DnsSecurityProfile` or ``None``
        :param dns_security_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  dns_security_profile_binding_map: :class:`DnsSecurityProfileBindingMap` or ``None``
        :param dns_security_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  domain: :class:`Domain` or ``None``
        :param domain: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  domain_deployment_map: :class:`DomainDeploymentMap` or ``None``
        :param domain_deployment_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  endpoint_policy: :class:`EndpointPolicy` or ``None``
        :param endpoint_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  endpoint_rule: :class:`EndpointRule` or ``None``
        :param endpoint_rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  enforcement_point: :class:`EnforcementPoint` or ``None``
        :param enforcement_point: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  evpn_config: :class:`EvpnConfig` or ``None``
        :param evpn_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  evpn_tunnel_endpoint_config: :class:`EvpnTunnelEndpointConfig` or ``None``
        :param evpn_tunnel_endpoint_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildEvpnTunnelEndpointConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  flood_protection_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param flood_protection_profile: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  flood_protection_profile_binding_map: :class:`FloodProtectionProfileBindingMap` or ``None``
        :param flood_protection_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  forwarding_policy: :class:`ForwardingPolicy` or ``None``
        :param forwarding_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  forwarding_rule: :class:`ForwardingRule` or ``None``
        :param forwarding_rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildForwardingRule,
    False,
    None))



class ChildFqdnAnalysisConfig(VapiStruct):
    """
    Child wrapper object for FqdnAnalysisConfig, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'FqdnAnalysisConfig': 'fqdn_analysis_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 fqdn_analysis_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,
                 request_parameter=None,
                ):
        """
        :type  fqdn_analysis_config: :class:`FqdnAnalysisConfig` or ``None``
        :param fqdn_analysis_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.fqdn_analysis_config = fqdn_analysis_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildFqdnAnalysisConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_fqdn_analysis_config', {
        'FqdnAnalysisConfig': type.OptionalType(type.ReferenceType(__name__, 'FqdnAnalysisConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildFqdnAnalysisConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  gateway_policy: :class:`GatewayPolicy` or ``None``
        :param gateway_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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 = {
                            'GatewayQosProfile': 'gateway_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 gateway_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,
                 request_parameter=None,
                ):
        """
        :type  gateway_qos_profile: :class:`GatewayQosProfile` or ``None``
        :param gateway_qos_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.gateway_qos_profile = gateway_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
        self.request_parameter = request_parameter
        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', {
        'GatewayQosProfile': 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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGatewayQosProfile,
    False,
    None))



class ChildGeneralSecurityProfile(VapiStruct):
    """
    Child wrapper object for GeneralSecurityProfile, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'GeneralSecurityProfile': 'general_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 general_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,
                 request_parameter=None,
                ):
        """
        :type  general_security_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param general_security_profile: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`GeneralSecurityProfile`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`GeneralSecurityProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.general_security_profile = general_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildGeneralSecurityProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_general_security_profile', {
        'GeneralSecurityProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'GeneralSecurityProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGeneralSecurityProfile,
    False,
    None))



class ChildGeneralSecurityProfileBindingMap(VapiStruct):
    """
    Child wrapper object for GeneralSecurityProfileBindingMap, used in
    hierarchical API

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



    _canonical_to_pep_names = {
                            'GeneralSecurityProfileBindingMap': 'general_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 general_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,
                 request_parameter=None,
                ):
        """
        :type  general_security_profile_binding_map: :class:`GeneralSecurityProfileBindingMap` or ``None``
        :param general_security_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.general_security_profile_binding_map = general_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildGeneralSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_general_security_profile_binding_map', {
        'GeneralSecurityProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'GeneralSecurityProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGeneralSecurityProfileBindingMap,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  global_config: :class:`GlobalConfig` or ``None``
        :param global_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGlobalConfig,
    False,
    None))



class ChildGlobalDfwConfiguration(VapiStruct):
    """
    Wrapper object for GlobalDfwConfiguration

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



    _canonical_to_pep_names = {
                            'GlobalDfwConfiguration': 'global_dfw_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 global_dfw_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,
                 request_parameter=None,
                ):
        """
        :type  global_dfw_configuration: :class:`GlobalDfwConfiguration` or ``None``
        :param global_dfw_configuration: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.global_dfw_configuration = global_dfw_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildGlobalDfwConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_global_dfw_configuration', {
        'GlobalDfwConfiguration': type.OptionalType(type.ReferenceType(__name__, 'GlobalDfwConfiguration')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGlobalDfwConfiguration,
    False,
    None))



class ChildGlobalIdsSettings(VapiStruct):
    """
    Child wrapper object for GlobalIdsSettings, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'GlobalIdsSettings': 'global_ids_settings',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 global_ids_settings=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,
                 request_parameter=None,
                ):
        """
        :type  global_ids_settings: :class:`GlobalIdsSettings` or ``None``
        :param global_ids_settings: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.global_ids_settings = global_ids_settings
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildGlobalIdsSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_global_ids_settings', {
        'GlobalIdsSettings': type.OptionalType(type.ReferenceType(__name__, 'GlobalIdsSettings')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGlobalIdsSettings,
    False,
    None))



class ChildGlobalIdsSignature(VapiStruct):
    """
    Child wrapper object for GlobalIdsSignature, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'GlobalIdsSignature': 'global_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 global_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,
                 request_parameter=None,
                ):
        """
        :type  global_ids_signature: :class:`GlobalIdsSignature` or ``None``
        :param global_ids_signature: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.global_ids_signature = global_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildGlobalIdsSignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_global_ids_signature', {
        'GlobalIdsSignature': type.OptionalType(type.ReferenceType(__name__, 'GlobalIdsSignature')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGlobalIdsSignature,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  global_manager: :class:`GlobalManager` or ``None``
        :param global_manager: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  group: :class:`Group` or ``None``
        :param group: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  group_discovery_profile_binding_map: :class:`GroupDiscoveryProfileBindingMap` or ``None``
        :param group_discovery_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  group_monitoring_profile_binding_map: :class:`GroupMonitoringProfileBindingMap` or ``None``
        :param group_monitoring_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildGroupMonitoringProfileBindingMap,
    False,
    None))



class ChildHostTransportNode(VapiStruct):
    """
    Child wrapper for Host Transport Node, used in hierarchical API.

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



    _canonical_to_pep_names = {
                            'HostTransportNode': 'host_transport_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 host_transport_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=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  host_transport_node: :class:`HostTransportNode` or ``None``
        :param host_transport_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.host_transport_node = host_transport_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildHostTransportNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_host_transport_node', {
        'HostTransportNode': type.OptionalType(type.ReferenceType(__name__, 'HostTransportNode')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildHostTransportNode,
    False,
    None))



class ChildHostTransportNodeCollection(VapiStruct):
    """
    Child wrapper for Transport Collection, used in hierarchical API.

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



    _canonical_to_pep_names = {
                            'HostTransportNodeCollection': 'host_transport_node_collection',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 host_transport_node_collection=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,
                 request_parameter=None,
                ):
        """
        :type  host_transport_node_collection: :class:`HostTransportNodeCollection` or ``None``
        :param host_transport_node_collection: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.host_transport_node_collection = host_transport_node_collection
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildHostTransportNodeCollection._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_host_transport_node_collection', {
        'HostTransportNodeCollection': type.OptionalType(type.ReferenceType(__name__, 'HostTransportNodeCollection')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildHostTransportNodeCollection,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_discovery_profile: :class:`IPDiscoveryProfile` or ``None``
        :param ip_discovery_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  i_pfixdfw_collector_profile: :class:`IPFIXDFWCollectorProfile` or ``None``
        :param i_pfixdfw_collector_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  i_pfixdfw_profile: :class:`IPFIXDFWProfile` or ``None``
        :param i_pfixdfw_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  i_pfix_l2_collector_profile: :class:`IPFIXL2CollectorProfile` or ``None``
        :param i_pfix_l2_collector_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  i_pfix_l2_profile: :class:`IPFIXL2Profile` or ``None``
        :param i_pfix_l2_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_sec_vpn_dpd_profile: :class:`IPSecVpnDpdProfile` or ``None``
        :param ip_sec_vpn_dpd_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_sec_vpn_ike_profile: :class:`IPSecVpnIkeProfile` or ``None``
        :param ip_sec_vpn_ike_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_sec_vpn_local_endpoint: :class:`IPSecVpnLocalEndpoint` or ``None``
        :param ip_sec_vpn_local_endpoint: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_sec_vpn_service: :class:`IPSecVpnService` or ``None``
        :param ip_sec_vpn_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_sec_vpn_session: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ip_sec_vpn_session: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_sec_vpn_tunnel_profile: :class:`IPSecVpnTunnelProfile` or ``None``
        :param ip_sec_vpn_tunnel_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIPSecVpnTunnelProfile,
    False,
    None))



class ChildIdentityFirewallStore(VapiStruct):
    """
    Child wrapper for IdentityFirewallStore, used in hierarchical API.

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



    _canonical_to_pep_names = {
                            'IdentityFirewallStore': 'identity_firewall_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 identity_firewall_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,
                 request_parameter=None,
                ):
        """
        :type  identity_firewall_store: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param identity_firewall_store: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IdentityFirewallStore`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`IdentityFirewallStore`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.identity_firewall_store = identity_firewall_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildIdentityFirewallStore._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_identity_firewall_store', {
        'IdentityFirewallStore': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IdentityFirewallStore')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdentityFirewallStore,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ids_cluster_config: :class:`IdsClusterConfig` or ``None``
        :param ids_cluster_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsClusterConfig,
    False,
    None))



class ChildIdsGatewayPolicy(VapiStruct):
    """
    Child wrapper object for IdsGatewayPolicy, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'IdsGatewayPolicy': 'ids_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ids_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,
                 request_parameter=None,
                ):
        """
        :type  ids_gateway_policy: :class:`IdsGatewayPolicy` or ``None``
        :param ids_gateway_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ids_gateway_policy = ids_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildIdsGatewayPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_gateway_policy', {
        'IdsGatewayPolicy': type.OptionalType(type.ReferenceType(__name__, 'IdsGatewayPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsGatewayPolicy,
    False,
    None))



class ChildIdsGlobalEventConfig(VapiStruct):
    """
    Child wrapper object for IdsGlobalEventConfig, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'IdsGlobalEventConfig': 'ids_global_event_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ids_global_event_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,
                 request_parameter=None,
                ):
        """
        :type  ids_global_event_config: :class:`IdsGlobalEventConfig` or ``None``
        :param ids_global_event_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ids_global_event_config = ids_global_event_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildIdsGlobalEventConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_global_event_config', {
        'IdsGlobalEventConfig': type.OptionalType(type.ReferenceType(__name__, 'IdsGlobalEventConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsGlobalEventConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ids_profile: :class:`IdsProfile` or ``None``
        :param ids_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ids_rule: :class:`IdsRule` or ``None``
        :param ids_rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ids_security_policy: :class:`IdsSecurityPolicy` or ``None``
        :param ids_security_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsSecurityPolicy,
    False,
    None))



class ChildIdsSettings(VapiStruct):
    """
    Child wrapper object for IdsSettings, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'IdsSettings': 'ids_settings',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ids_settings=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,
                 request_parameter=None,
                ):
        """
        :type  ids_settings: :class:`IdsSettings` or ``None``
        :param ids_settings: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ids_settings = ids_settings
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildIdsSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_settings', {
        'IdsSettings': type.OptionalType(type.ReferenceType(__name__, 'IdsSettings')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsSettings,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ids_signature: :class:`IdsSignature` or ``None``
        :param ids_signature: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsSignature,
    False,
    None))



class ChildIdsSignatureStatus(VapiStruct):
    """
    Child wrapper object for IdsSignatureStatus, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'IdsSignatureStatus': 'ids_signature_status',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ids_signature_status=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,
                 request_parameter=None,
                ):
        """
        :type  ids_signature_status: :class:`IdsSignatureStatus` or ``None``
        :param ids_signature_status: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ids_signature_status = ids_signature_status
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildIdsSignatureStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_signature_status', {
        'IdsSignatureStatus': type.OptionalType(type.ReferenceType(__name__, 'IdsSignatureStatus')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsSignatureStatus,
    False,
    None))



class ChildIdsSignatureVersion(VapiStruct):
    """
    Child wrapper object for IdsSignatureVersion, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'IdsSignatureVersion': 'ids_signature_version',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ids_signature_version=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,
                 request_parameter=None,
                ):
        """
        :type  ids_signature_version: :class:`IdsSignatureVersion` or ``None``
        :param ids_signature_version: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ids_signature_version = ids_signature_version
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildIdsSignatureVersion._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_signature_version', {
        'IdsSignatureVersion': type.OptionalType(type.ReferenceType(__name__, 'IdsSignatureVersion')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsSignatureVersion,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ids_standalone_host_config: :class:`IdsStandaloneHostConfig` or ``None``
        :param ids_standalone_host_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildIdsStandaloneHostConfig,
    False,
    None))



class ChildInfra(VapiStruct):
    """
    Child wrapper object for Infra, used in multi-tenancy hierarchical API

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



    _canonical_to_pep_names = {
                            'Infra': 'infra',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 infra=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,
                 request_parameter=None,
                ):
        """
        :type  infra: :class:`Infra` or ``None``
        :param infra: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.infra = infra
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildInfra._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_infra', {
        'Infra': type.OptionalType(type.ReferenceType(__name__, '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.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildInfra,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_address_allocation: :class:`IpAddressAllocation` or ``None``
        :param ip_address_allocation: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_address_block: :class:`IpAddressBlock` or ``None``
        :param ip_address_block: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_address_pool: :class:`IpAddressPool` or ``None``
        :param ip_address_pool: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ip_address_pool_subnet: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ip_address_pool_subnet: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ipv6_dad_profile: :class:`Ipv6DadProfile` or ``None``
        :param ipv6_dad_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  ipv6_ndra_profile: :class:`Ipv6NdraProfile` or ``None``
        :param ipv6_ndra_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  l2_bridge_endpoint_profile: :class:`L2BridgeEndpointProfile` or ``None``
        :param l2_bridge_endpoint_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  l2_vpn_service: :class:`L2VPNService` or ``None``
        :param l2_vpn_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  l2_vpn_session: :class:`L2VPNSession` or ``None``
        :param l2_vpn_session: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  l2_vpn: :class:`L2Vpn` or ``None``
        :param l2_vpn: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  l2_vpn_context: :class:`L2VpnContext` or ``None``
        :param l2_vpn_context: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  l3_vpn: :class:`L3Vpn` or ``None``
        :param l3_vpn: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  l3_vpn_context: :class:`L3VpnContext` or ``None``
        :param l3_vpn_context: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildL3VpnContext,
    False,
    None))



class ChildL7AccessEntry(VapiStruct):
    """
    Child wrapper object for L7 Access Entry, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'L7AccessEntry': 'l7_access_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 l7_access_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,
                 request_parameter=None,
                ):
        """
        :type  l7_access_entry: :class:`L7AccessEntry` or ``None``
        :param l7_access_entry: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.l7_access_entry = l7_access_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildL7AccessEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l7_access_entry', {
        'L7AccessEntry': type.OptionalType(type.ReferenceType(__name__, 'L7AccessEntry')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildL7AccessEntry,
    False,
    None))



class ChildL7AccessProfile(VapiStruct):
    """
    Child wrapper object for L7 Access Profile, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'L7AccessProfile': 'l7_access_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 l7_access_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,
                 request_parameter=None,
                ):
        """
        :type  l7_access_profile: :class:`L7AccessProfile` or ``None``
        :param l7_access_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.l7_access_profile = l7_access_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildL7AccessProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l7_access_profile', {
        'L7AccessProfile': type.OptionalType(type.ReferenceType(__name__, 'L7AccessProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildL7AccessProfile,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_app_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param lb_app_profile: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_client_ssl_profile: :class:`LBClientSslProfile` or ``None``
        :param lb_client_ssl_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_monitor_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param lb_monitor_profile: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_persistence_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param lb_persistence_profile: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_pool: :class:`LBPool` or ``None``
        :param lb_pool: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_server_ssl_profile: :class:`LBServerSslProfile` or ``None``
        :param lb_server_ssl_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_service: :class:`LBService` or ``None``
        :param lb_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  lb_virtual_server: :class:`LBVirtualServer` or ``None``
        :param lb_virtual_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildLBVirtualServer,
    False,
    None))



class ChildLiveTraceConfig(VapiStruct):
    """
    Child wrapper for LiveTraceConfig for Hierarchical API

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



    _canonical_to_pep_names = {
                            'LiveTraceConfig': 'live_trace_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 live_trace_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,
                 request_parameter=None,
                ):
        """
        :type  live_trace_config: :class:`LiveTraceConfig` or ``None``
        :param live_trace_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.live_trace_config = live_trace_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildLiveTraceConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_live_trace_config', {
        'LiveTraceConfig': type.OptionalType(type.ReferenceType(__name__, 'LiveTraceConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildLiveTraceConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  locale_services: :class:`LocaleServices` or ``None``
        :param locale_services: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  mac_discovery_profile: :class:`MacDiscoveryProfile` or ``None``
        :param mac_discovery_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildMacDiscoveryProfile,
    False,
    None))



class ChildMalwarePreventionProfile(VapiStruct):
    """
    Child wrapper object for MalwarePreventionProfile, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'MalwarePreventionProfile': 'malware_prevention_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 malware_prevention_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,
                 request_parameter=None,
                ):
        """
        :type  malware_prevention_profile: :class:`MalwarePreventionProfile` or ``None``
        :param malware_prevention_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.malware_prevention_profile = malware_prevention_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildMalwarePreventionProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_malware_prevention_profile', {
        'MalwarePreventionProfile': type.OptionalType(type.ReferenceType(__name__, 'MalwarePreventionProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildMalwarePreventionProfile,
    False,
    None))



class ChildMalwarePreventionSignature(VapiStruct):
    """
    Child wrapper object for MalwarePreventionSignature, used in hierarchical
    API

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



    _canonical_to_pep_names = {
                            'MalwarePreventionSignature': 'malware_prevention_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 malware_prevention_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,
                 request_parameter=None,
                ):
        """
        :type  malware_prevention_signature: :class:`MalwarePreventionSignature` or ``None``
        :param malware_prevention_signature: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.malware_prevention_signature = malware_prevention_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildMalwarePreventionSignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_malware_prevention_signature', {
        'MalwarePreventionSignature': type.OptionalType(type.ReferenceType(__name__, 'MalwarePreventionSignature')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildMalwarePreventionSignature,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  metadata_proxy_config: :class:`MetadataProxyConfig` or ``None``
        :param metadata_proxy_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildMetadataProxyConfig,
    False,
    None))



class ChildOdsRunbookInvocation(VapiStruct):
    """
    Child wrapper for OdsRunbookInvocation for Hierarchical API

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



    _canonical_to_pep_names = {
                            'OdsRunbookInvocation': 'ods_runbook_invocation',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ods_runbook_invocation=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,
                 request_parameter=None,
                ):
        """
        :type  ods_runbook_invocation: :class:`OdsRunbookInvocation` or ``None``
        :param ods_runbook_invocation: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ods_runbook_invocation = ods_runbook_invocation
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildOdsRunbookInvocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ods_runbook_invocation', {
        'OdsRunbookInvocation': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookInvocation')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildOdsRunbookInvocation,
    False,
    None))



class ChildOdsRunbookInvocationArtifactBatchRequest(VapiStruct):
    """
    Child wrapper for OdsRunbookInvocationArtifactBatchRequest for Hierarchical
    API

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



    _canonical_to_pep_names = {
                            'OdsRunbookInvocation': 'ods_runbook_invocation',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ods_runbook_invocation=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,
                 request_parameter=None,
                ):
        """
        :type  ods_runbook_invocation: :class:`OdsRunbookInvocationArtifactBatchRequest` or ``None``
        :param ods_runbook_invocation: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ods_runbook_invocation = ods_runbook_invocation
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildOdsRunbookInvocationArtifactBatchRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ods_runbook_invocation_artifact_batch_request', {
        'OdsRunbookInvocation': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookInvocationArtifactBatchRequest')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildOdsRunbookInvocationArtifactBatchRequest,
    False,
    None))



class ChildOpsGlobalConfig(VapiStruct):
    """
    Child wrapper object for OpsGlobalConfig, 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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  global_config: :class:`OpsGlobalConfig` or ``None``
        :param global_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildOpsGlobalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ops_global_config', {
        'GlobalConfig': type.OptionalType(type.ReferenceType(__name__, 'OpsGlobalConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildOpsGlobalConfig,
    False,
    None))



class ChildOrg(VapiStruct):
    """
    Child wrapper object for Org, used in hierarchical API

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



    _canonical_to_pep_names = {
                            'Org': 'org',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 org=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,
                 request_parameter=None,
                ):
        """
        :type  org: :class:`Org` or ``None``
        :param org: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.org = org
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildOrg._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_org', {
        'Org': type.OptionalType(type.ReferenceType(__name__, 'Org')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildOrg,
    False,
    None))



class ChildOrgRoot(VapiStruct):
    """
    Child wrapper object for OrgRoot, used in multi-tenancy hierarchical API

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



    _canonical_to_pep_names = {
                            'OrgRoot': 'org_root',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 org_root=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,
                 request_parameter=None,
                ):
        """
        :type  org_root: :class:`OrgRoot` or ``None``
        :param org_root: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.org_root = org_root
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildOrgRoot._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_org_root', {
        'OrgRoot': type.OptionalType(type.ReferenceType(__name__, 'OrgRoot')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildOrgRoot,
    False,
    None))



class ChildOspfAreaConfig(VapiStruct):
    """
    Child wrapper object for OspfAreaConfig used in hierarchical API.

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



    _canonical_to_pep_names = {
                            'OspfAreaConfig': 'ospf_area_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ospf_area_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,
                 request_parameter=None,
                ):
        """
        :type  ospf_area_config: :class:`OspfAreaConfig` or ``None``
        :param ospf_area_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ospf_area_config = ospf_area_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildOspfAreaConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ospf_area_config', {
        'OspfAreaConfig': type.OptionalType(type.ReferenceType(__name__, 'OspfAreaConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildOspfAreaConfig,
    False,
    None))



class ChildOspfRoutingConfig(VapiStruct):
    """
    Child wrapper object for OspfRoutingConfig used in hierarchical API.

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



    _canonical_to_pep_names = {
                            'OspfRoutingConfig': 'ospf_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 ospf_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,
                 request_parameter=None,
                ):
        """
        :type  ospf_routing_config: :class:`OspfRoutingConfig` or ``None``
        :param ospf_routing_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.ospf_routing_config = ospf_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildOspfRoutingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ospf_routing_config', {
        'OspfRoutingConfig': type.OptionalType(type.ReferenceType(__name__, 'OspfRoutingConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildOspfRoutingConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_context_profile: :class:`PolicyContextProfile` or ``None``
        :param policy_context_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyContextProfile,
    False,
    None))



class ChildPolicyCustomAttributes(VapiStruct):
    """
    Child wrapper object for PolicyCustomAttributes, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyCustomAttributes"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicyCustomAttributes': 'policy_custom_attributes',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_custom_attributes=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='ChildPolicyCustomAttributes',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_custom_attributes: :class:`PolicyCustomAttributes` or ``None``
        :param policy_custom_attributes: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_custom_attributes = policy_custom_attributes
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicyCustomAttributes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_custom_attributes', {
        'PolicyCustomAttributes': type.OptionalType(type.ReferenceType(__name__, 'PolicyCustomAttributes')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyCustomAttributes,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_dns_forwarder: :class:`PolicyDnsForwarder` or ``None``
        :param policy_dns_forwarder: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_dns_forwarder_zone: :class:`PolicyDnsForwarderZone` or ``None``
        :param policy_dns_forwarder_zone: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_edge_cluster: :class:`PolicyEdgeCluster` or ``None``
        :param policy_edge_cluster: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_edge_node: :class:`PolicyEdgeNode` or ``None``
        :param policy_edge_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_exclude_list: :class:`PolicyExcludeList` or ``None``
        :param policy_exclude_list: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_firewall_cpu_mem_thresholds_profile_binding_map: :class:`PolicyFirewallCPUMemThresholdsProfileBindingMap` or ``None``
        :param policy_firewall_cpu_mem_thresholds_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_firewall_cpu_mem_thresholds_profile: :class:`PolicyFirewallCpuMemThresholdsProfile` or ``None``
        :param policy_firewall_cpu_mem_thresholds_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_firewall_flood_protection_profile_binding_map: :class:`PolicyFirewallFloodProtectionProfileBindingMap` or ``None``
        :param policy_firewall_flood_protection_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyFirewallFloodProtectionProfileBindingMap,
    False,
    None))



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

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyFirewallIpReputationConfig"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicyFirewallIpReputationConfig': 'policy_firewall_ip_reputation_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_firewall_ip_reputation_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='ChildPolicyFirewallIpReputationConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_firewall_ip_reputation_config: :class:`PolicyFirewallIpReputationConfig` or ``None``
        :param policy_firewall_ip_reputation_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_firewall_ip_reputation_config = policy_firewall_ip_reputation_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicyFirewallIpReputationConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_firewall_ip_reputation_config', {
        'PolicyFirewallIpReputationConfig': type.OptionalType(type.ReferenceType(__name__, 'PolicyFirewallIpReputationConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyFirewallIpReputationConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_firewall_scheduler: :class:`PolicyFirewallScheduler` or ``None``
        :param policy_firewall_scheduler: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_firewall_session_timer_profile: :class:`PolicyFirewallSessionTimerProfile` or ``None``
        :param policy_firewall_session_timer_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_firewall_session_timer_profile_binding_map: :class:`PolicyFirewallSessionTimerProfileBindingMap` or ``None``
        :param policy_firewall_session_timer_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyFirewallSessionTimerProfileBindingMap,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_igmp_profile: :class:`PolicyIgmpProfile` or ``None``
        :param policy_igmp_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyIgmpProfile,
    False,
    None))



class ChildPolicyInterVrfRoutingConfig(VapiStruct):
    """
    Child wrapper object for PolicyInterVrfRoutingConfig used in hierarchical
    API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyInterVrfRoutingConfig"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicyInterVrfRoutingConfig': 'policy_inter_vrf_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_inter_vrf_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='ChildPolicyInterVrfRoutingConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_inter_vrf_routing_config: :class:`PolicyInterVrfRoutingConfig` or ``None``
        :param policy_inter_vrf_routing_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_inter_vrf_routing_config = policy_inter_vrf_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicyInterVrfRoutingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_inter_vrf_routing_config', {
        'PolicyInterVrfRoutingConfig': type.OptionalType(type.ReferenceType(__name__, 'PolicyInterVrfRoutingConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyInterVrfRoutingConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_label: :class:`PolicyLabel` or ``None``
        :param policy_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyLabel,
    False,
    None))



class ChildPolicyLatencyStatProfile(VapiStruct):
    """
    Child wrapper object for PolicyLatencyStatProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyLatencyStatProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicyLatencyStatProfile': 'policy_latency_stat_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_latency_stat_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='ChildPolicyLatencyStatProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_latency_stat_profile: :class:`PolicyLatencyStatProfile` or ``None``
        :param policy_latency_stat_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_latency_stat_profile = policy_latency_stat_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicyLatencyStatProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_latency_stat_profile', {
        'PolicyLatencyStatProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyLatencyStatProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyLatencyStatProfile,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_multicast_config: :class:`PolicyMulticastConfig` or ``None``
        :param policy_multicast_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_nat: :class:`PolicyNat` or ``None``
        :param policy_nat: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_nat_rule: :class:`PolicyNatRule` or ``None``
        :param policy_nat_rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_pim_profile: :class:`PolicyPimProfile` or ``None``
        :param policy_pim_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyPimProfile,
    False,
    None))



class ChildPolicySIExcludeList(VapiStruct):
    """
    Wrapper object for PolicySIExcludeList

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicySIExcludeList"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicySIExcludeList': 'policy_si_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_si_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='ChildPolicySIExcludeList',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_si_exclude_list: :class:`PolicySIExcludeList` or ``None``
        :param policy_si_exclude_list: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_si_exclude_list = policy_si_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicySIExcludeList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_SI_exclude_list', {
        'PolicySIExcludeList': type.OptionalType(type.ReferenceType(__name__, 'PolicySIExcludeList')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicySIExcludeList,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_service_chain: :class:`PolicyServiceChain` or ``None``
        :param policy_service_chain: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_service_instance: :class:`PolicyServiceInstance` or ``None``
        :param policy_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_service_profile: :class:`PolicyServiceProfile` or ``None``
        :param policy_service_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyServiceProfile,
    False,
    None))



class ChildPolicyTier1MulticastConfig(VapiStruct):
    """
    Child wrapper object for PolicyTier1MulticastConfig used in hierarchical
    API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyTier1MulticastConfig"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicyTier1MulticastConfig': 'policy_tier1_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_tier1_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='ChildPolicyTier1MulticastConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_tier1_multicast_config: :class:`PolicyTier1MulticastConfig` or ``None``
        :param policy_tier1_multicast_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_tier1_multicast_config = policy_tier1_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicyTier1MulticastConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_tier1_multicast_config', {
        'PolicyTier1MulticastConfig': type.OptionalType(type.ReferenceType(__name__, 'PolicyTier1MulticastConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyTier1MulticastConfig,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_transport_zone: :class:`PolicyTransportZone` or ``None``
        :param policy_transport_zone: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyTransportZone,
    False,
    None))



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

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyTransportZoneProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicyTransportZoneProfile': 'policy_transport_zone_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_transport_zone_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='ChildPolicyTransportZoneProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_transport_zone_profile: :class:`PolicyTransportZoneProfile` or ``None``
        :param policy_transport_zone_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_transport_zone_profile = policy_transport_zone_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicyTransportZoneProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_transport_zone_profile', {
        'PolicyTransportZoneProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyTransportZoneProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyTransportZoneProfile,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  policy_url_categorization_config: :class:`PolicyUrlCategorizationConfig` or ``None``
        :param policy_url_categorization_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyUrlCategorizationConfig,
    False,
    None))



class ChildPolicyVpcNatRule(VapiStruct):
    """
    Child wrapper object for PolicyVpcNatRule, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyVpcNatRule"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicyVpcNatRule': 'policy_vpc_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_vpc_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='ChildPolicyVpcNatRule',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_vpc_nat_rule: :class:`PolicyVpcNatRule` or ``None``
        :param policy_vpc_nat_rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_vpc_nat_rule = policy_vpc_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildPolicyVpcNatRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_vpc_nat_rule', {
        'PolicyVpcNatRule': type.OptionalType(type.ReferenceType(__name__, 'PolicyVpcNatRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPolicyVpcNatRule,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  port_discovery_profile_binding_map: :class:`PortDiscoveryProfileBindingMap` or ``None``
        :param port_discovery_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  port_mirroring_profile: :class:`PortMirroringProfile` or ``None``
        :param port_mirroring_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  port_monitoring_profile_binding_map: :class:`PortMonitoringProfileBindingMap` or ``None``
        :param port_monitoring_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  port_qos_profile_binding_map: :class:`PortQosProfileBindingMap` or ``None``
        :param port_qos_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  port_security_profile_binding_map: :class:`PortSecurityProfileBindingMap` or ``None``
        :param port_security_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  prefix_list: :class:`PrefixList` or ``None``
        :param prefix_list: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildPrefixList,
    False,
    None))



class ChildProject(VapiStruct):
    """
    Child wrapper object for Project, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildProject"
    """
    Identifier denoting this class, when it is used 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 = {
                            'Project': 'project',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 project=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='ChildProject',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  project: :class:`Project` or ``None``
        :param project: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.project = project
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildProject._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_project', {
        'Project': type.OptionalType(type.ReferenceType(__name__, 'Project')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildProject,
    False,
    None))



class ChildProjectRouteFilter(VapiStruct):
    """
    Child wrapper object for ProjectRouteFilter used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildProjectRouteFilter"
    """
    Identifier denoting this class, when it is used 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 = {
                            'ProjectRouteFilter': 'project_route_filter',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 project_route_filter=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='ChildProjectRouteFilter',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  project_route_filter: :class:`ProjectRouteFilter` or ``None``
        :param project_route_filter: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.project_route_filter = project_route_filter
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildProjectRouteFilter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_project_route_filter', {
        'ProjectRouteFilter': type.OptionalType(type.ReferenceType(__name__, 'ProjectRouteFilter')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildProjectRouteFilter,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  qos_profile: :class:`QosProfile` or ``None``
        :param qos_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  reaction: :class:`Reaction` or ``None``
        :param reaction: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  redirection_policy: :class:`RedirectionPolicy` or ``None``
        :param redirection_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  redirection_rule: :class:`RedirectionRule` or ``None``
        :param redirection_rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  rule: :class:`Rule` or ``None``
        :param rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildRule,
    False,
    None))



class ChildSIStatusConfiguration(VapiStruct):
    """
    Wrapper object for PolicySIStatusConfiguration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSIStatusConfiguration"
    """
    Identifier denoting this class, when it is used 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 = {
                            'PolicySIStatusConfiguration': 'policy_si_status_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 policy_si_status_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='ChildSIStatusConfiguration',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  policy_si_status_configuration: :class:`PolicySIStatusConfiguration` or ``None``
        :param policy_si_status_configuration: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.policy_si_status_configuration = policy_si_status_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildSIStatusConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_SI_status_configuration', {
        'PolicySIStatusConfiguration': type.OptionalType(type.ReferenceType(__name__, 'PolicySIStatusConfiguration')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildSIStatusConfiguration,
    False,
    None))



class ChildSecurityFeatures(VapiStruct):
    """
    Child wrapper object for T1 Security Feature, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSecurityFeatures"
    """
    Identifier denoting this class, when it is used 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 = {
                            'SecurityFeatures': 'security_features',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 security_features=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='ChildSecurityFeatures',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  security_features: :class:`SecurityFeatures` or ``None``
        :param security_features: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.security_features = security_features
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildSecurityFeatures._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_security_features', {
        'SecurityFeatures': type.OptionalType(type.ReferenceType(__name__, 'SecurityFeatures')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildSecurityFeatures,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  security_policy: :class:`SecurityPolicy` or ``None``
        :param security_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildSecurityPolicy,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  segment: :class:`Segment` or ``None``
        :param segment: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  segment_discovery_profile_binding_map: :class:`SegmentDiscoveryProfileBindingMap` or ``None``
        :param segment_discovery_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  segment_monitoring_profile_binding_map: :class:`SegmentMonitoringProfileBindingMap` or ``None``
        :param segment_monitoring_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  segment_port: :class:`SegmentPort` or ``None``
        :param segment_port: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  segment_qos_profile_binding_map: :class:`SegmentQosProfileBindingMap` or ``None``
        :param segment_qos_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  segment_security_profile: :class:`SegmentSecurityProfile` or ``None``
        :param segment_security_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  segment_security_profile_binding_map: :class:`SegmentSecurityProfileBindingMap` or ``None``
        :param segment_security_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  service: :class:`Service` or ``None``
        :param 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  service: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service: 
            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: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  service_instance_endpoint: :class:`ServiceInstanceEndpoint` or ``None``
        :param service_instance_endpoint: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  service_interface: :class:`ServiceInterface` or ``None``
        :param service_interface: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  service_reference: :class:`ServiceReference` or ``None``
        :param service_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  service_segment: :class:`ServiceSegment` or ``None``
        :param service_segment: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  session_timer_profile_binding_map: :class:`SessionTimerProfileBindingMap` or ``None``
        :param session_timer_profile_binding_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildSessionTimerProfileBindingMap,
    False,
    None))



class ChildShaDynamicPlugin(VapiStruct):
    """
    Child wrapper object for ShaDynamicPlugin, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildShaDynamicPlugin"
    """
    Identifier denoting this class, when it is used 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 = {
                            'ShaPluginProfile': 'sha_plugin_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 sha_plugin_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='ChildShaDynamicPlugin',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  sha_plugin_profile: :class:`ShaDynamicPlugin` or ``None``
        :param sha_plugin_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.sha_plugin_profile = sha_plugin_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildShaDynamicPlugin._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_sha_dynamic_plugin', {
        'ShaPluginProfile': type.OptionalType(type.ReferenceType(__name__, 'ShaDynamicPlugin')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildShaDynamicPlugin,
    False,
    None))



class ChildShaPluginProfile(VapiStruct):
    """
    Child wrapper object for ShaPluginProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildShaPluginProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'ShaPluginProfile': 'sha_plugin_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 sha_plugin_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='ChildShaPluginProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  sha_plugin_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param sha_plugin_profile: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ShaPluginProfile`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`ShaPluginProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.sha_plugin_profile = sha_plugin_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildShaPluginProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_sha_plugin_profile', {
        'ShaPluginProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ShaPluginProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildShaPluginProfile,
    False,
    None))



class ChildShaPredefinedPlugin(VapiStruct):
    """
    Child wrapper object for ShaPredefinedPlugin, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildShaPredefinedPlugin"
    """
    Identifier denoting this class, when it is used 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 = {
                            'ShaPluginProfile': 'sha_plugin_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 sha_plugin_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='ChildShaPredefinedPlugin',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  sha_plugin_profile: :class:`ShaPredefinedPlugin` or ``None``
        :param sha_plugin_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.sha_plugin_profile = sha_plugin_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildShaPredefinedPlugin._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_sha_predefined_plugin', {
        'ShaPluginProfile': type.OptionalType(type.ReferenceType(__name__, 'ShaPredefinedPlugin')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildShaPredefinedPlugin,
    False,
    None))



class ChildShare(VapiStruct):
    """
    Child wrapper object for Share, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildShare"
    """
    Identifier denoting this class, when it is used 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 = {
                            'Share': 'share',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 share=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='ChildShare',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  share: :class:`Share` or ``None``
        :param share: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.share = share
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildShare._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_share', {
        'Share': type.OptionalType(type.ReferenceType(__name__, 'Share')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildShare,
    False,
    None))



class ChildSharedResource(VapiStruct):
    """
    Child wrapper object for SharedResource, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSharedResource"
    """
    Identifier denoting this class, when it is used 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 = {
                            'SharedResource': 'shared_resource',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 shared_resource=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='ChildSharedResource',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  shared_resource: :class:`SharedResource` or ``None``
        :param shared_resource: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.shared_resource = shared_resource
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildSharedResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_shared_resource', {
        'SharedResource': type.OptionalType(type.ReferenceType(__name__, 'SharedResource')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildSharedResource,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  site: :class:`Site` or ``None``
        :param site: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  spoof_guard_profile: :class:`SpoofGuardProfile` or ``None``
        :param spoof_guard_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildSpoofGuardProfile,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  standalone_host_idfw_configuration: :class:`StandaloneHostIdfwConfiguration` or ``None``
        :param standalone_host_idfw_configuration: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  static_arp_config: :class:`StaticARPConfig` or ``None``
        :param static_arp_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildStaticARPConfig,
    False,
    None))



class ChildStaticMimeContent(VapiStruct):
    """
    Child wrapper object for Static MIME content, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildStaticMimeContent"
    """
    Identifier denoting this class, when it is used 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 = {
                            'TlsProfile': 'tls_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tls_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='ChildStaticMimeContent',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tls_profile: :class:`StaticMimeContent` or ``None``
        :param tls_profile: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tls_profile = tls_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildStaticMimeContent._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_static_mime_content', {
        'TlsProfile': type.OptionalType(type.ReferenceType(__name__, 'StaticMimeContent')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildStaticMimeContent,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  bfd_peer: :class:`StaticRouteBfdPeer` or ``None``
        :param bfd_peer: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  static_routes: :class:`StaticRoutes` or ``None``
        :param static_routes: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildStaticRoutes,
    False,
    None))



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

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTagBulkOperation"
    """
    Identifier denoting this class, when it is used 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 = {
                            'TagBulkOperation': 'tag_bulk_operation',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tag_bulk_operation=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='ChildTagBulkOperation',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tag_bulk_operation: :class:`TagBulkOperation` or ``None``
        :param tag_bulk_operation: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tag_bulk_operation = tag_bulk_operation
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildTagBulkOperation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tag_bulk_operation', {
        'TagBulkOperation': type.OptionalType(type.ReferenceType(__name__, 'TagBulkOperation')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTagBulkOperation,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tier0: :class:`Tier0` or ``None``
        :param tier0: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tier0_deployment_map: :class:`Tier0DeploymentMap` or ``None``
        :param tier0_deployment_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tier0_interface: :class:`Tier0Interface` or ``None``
        :param tier0_interface: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTier0Interface,
    False,
    None))



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

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier0InterfaceGroup"
    """
    Identifier denoting this class, when it is used 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 = {
                            'Tier0InterfaceGroup': 'tier0_interface_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tier0_interface_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='ChildTier0InterfaceGroup',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tier0_interface_group: :class:`Tier0InterfaceGroup` or ``None``
        :param tier0_interface_group: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tier0_interface_group = tier0_interface_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildTier0InterfaceGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier0_interface_group', {
        'Tier0InterfaceGroup': type.OptionalType(type.ReferenceType(__name__, 'Tier0InterfaceGroup')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTier0InterfaceGroup,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tier0_route_map: :class:`Tier0RouteMap` or ``None``
        :param tier0_route_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTier0RouteMap,
    False,
    None))



class ChildTier0SecurityFeatures(VapiStruct):
    """
    Child wrapper object for T0 Security Feature, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier0SecurityFeatures"
    """
    Identifier denoting this class, when it is used 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 = {
                            'Tier0SecurityFeatures': 'tier0_security_features',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tier0_security_features=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='ChildTier0SecurityFeatures',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tier0_security_features: :class:`Tier0SecurityFeatures` or ``None``
        :param tier0_security_features: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tier0_security_features = tier0_security_features
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildTier0SecurityFeatures._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier0_security_features', {
        'Tier0SecurityFeatures': type.OptionalType(type.ReferenceType(__name__, 'Tier0SecurityFeatures')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTier0SecurityFeatures,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tier1: :class:`Tier1` or ``None``
        :param tier1: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tier1_deployment_map: :class:`Tier1DeploymentMap` or ``None``
        :param tier1_deployment_map: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tier1_interface: :class:`Tier1Interface` or ``None``
        :param tier1_interface: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTier1Interface,
    False,
    None))



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

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier1InterfaceGroup"
    """
    Identifier denoting this class, when it is used 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 = {
                            'Tier1InterfaceGroup': 'tier1_interface_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tier1_interface_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='ChildTier1InterfaceGroup',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tier1_interface_group: :class:`Tier1InterfaceGroup` or ``None``
        :param tier1_interface_group: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tier1_interface_group = tier1_interface_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildTier1InterfaceGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier1_interface_group', {
        'Tier1InterfaceGroup': type.OptionalType(type.ReferenceType(__name__, 'Tier1InterfaceGroup')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTier1InterfaceGroup,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tls_certificate: :class:`TlsCertificate` or ``None``
        :param tls_certificate: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tls_crl: :class:`TlsCrl` or ``None``
        :param tls_crl: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTlsCrl,
    False,
    None))



class ChildTlsPolicy(VapiStruct):
    """
    Child wrapper object for TLSPolicy, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTlsPolicy"
    """
    Identifier denoting this class, when it is used 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 = {
                            'TlsPolicy': 'tls_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tls_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='ChildTlsPolicy',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tls_policy: :class:`TlsPolicy` or ``None``
        :param tls_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tls_policy = tls_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildTlsPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tls_policy', {
        'TlsPolicy': type.OptionalType(type.ReferenceType(__name__, 'TlsPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTlsPolicy,
    False,
    None))



class ChildTlsProfile(VapiStruct):
    """
    Child wrapper object for TLS Profile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTlsProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'TlsProfile': 'tls_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tls_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='ChildTlsProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tls_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param tls_profile: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`TlsProfile`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`TlsProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tls_profile = tls_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildTlsProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tls_profile', {
        'TlsProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'TlsProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTlsProfile,
    False,
    None))



class ChildTlsRule(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 = "ChildTlsRule"
    """
    Identifier denoting this class, when it is used 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 = {
                            'TlsRule': 'tls_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 tls_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='ChildTlsRule',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  tls_rule: :class:`TlsRule` or ``None``
        :param tls_rule: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.tls_rule = tls_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildTlsRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tls_rule', {
        'TlsRule': type.OptionalType(type.ReferenceType(__name__, 'TlsRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTlsRule,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  tls_trust_data: :class:`TlsTrustData` or ``None``
        :param tls_trust_data: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  traceflow_config: :class:`TraceflowConfig` or ``None``
        :param traceflow_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildTraceflowConfig,
    False,
    None))



class ChildVMTagReplicationPolicy(VapiStruct):
    """
    Child wrapper object for VMTagReplicationPolicy, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVMTagReplicationPolicy"
    """
    Identifier denoting this class, when it is used 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 = {
                            'VMTagReplicationPolicy': 'vm_tag_replication_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 vm_tag_replication_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='ChildVMTagReplicationPolicy',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  vm_tag_replication_policy: :class:`VMTagReplicationPolicy` or ``None``
        :param vm_tag_replication_policy: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.vm_tag_replication_policy = vm_tag_replication_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildVMTagReplicationPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_VM_tag_replication_policy', {
        'VMTagReplicationPolicy': type.OptionalType(type.ReferenceType(__name__, 'VMTagReplicationPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildVMTagReplicationPolicy,
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  virtual_endpoint: :class:`VirtualEndpoint` or ``None``
        :param virtual_endpoint: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    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',
                            'request_parameter': 'request_parameter',
                            }

    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,
                 request_parameter=None,
                ):
        """
        :type  vni_pool_config: :class:`VniPoolConfig` or ``None``
        :param vni_pool_config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        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
        self.request_parameter = request_parameter
        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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildVniPoolConfig,
    False,
    None))



class ChildVpc(VapiStruct):
    """
    Child wrapper object for VPC, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVpc"
    """
    Identifier denoting this class, when it is used 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 = {
                            'Vpc': 'vpc',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 vpc=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='ChildVpc',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  vpc: :class:`Vpc` or ``None``
        :param vpc: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.vpc = vpc
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildVpc._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_vpc', {
        'Vpc': type.OptionalType(type.ReferenceType(__name__, 'Vpc')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildVpc,
    False,
    None))



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

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVpcIpAddressAllocation"
    """
    Identifier denoting this class, when it is used 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 = {
                            'VpcIpAddressAllocation': 'vpc_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 vpc_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='ChildVpcIpAddressAllocation',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  vpc_ip_address_allocation: :class:`VpcIpAddressAllocation` or ``None``
        :param vpc_ip_address_allocation: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.vpc_ip_address_allocation = vpc_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildVpcIpAddressAllocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_vpc_ip_address_allocation', {
        'VpcIpAddressAllocation': type.OptionalType(type.ReferenceType(__name__, 'VpcIpAddressAllocation')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildVpcIpAddressAllocation,
    False,
    None))



class ChildVpcSubnet(VapiStruct):
    """
    Child wrapper object for VPC Subnet, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVpcSubnet"
    """
    Identifier denoting this class, when it is used 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 = {
                            'VpcSubnet': 'vpc_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 vpc_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='ChildVpcSubnet',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  vpc_subnet: :class:`VpcSubnet` or ``None``
        :param vpc_subnet: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.vpc_subnet = vpc_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildVpcSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_vpc_subnet', {
        'VpcSubnet': type.OptionalType(type.ReferenceType(__name__, 'VpcSubnet')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildVpcSubnet,
    False,
    None))



class ChildVpcSubnetPort(VapiStruct):
    """
    Child wrapper object for VPC Subnet Port, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVpcSubnetPort"
    """
    Identifier denoting this class, when it is used 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 = {
                            'VpcSubnetPort': 'vpc_subnet_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',
                            'request_parameter': 'request_parameter',
                            }

    def __init__(self,
                 vpc_subnet_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='ChildVpcSubnetPort',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                 request_parameter=None,
                ):
        """
        :type  vpc_subnet_port: :class:`VpcSubnetPort` or ``None``
        :param vpc_subnet_port: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
        :type  request_parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyRequestParameter`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyRequestParameter`.
        """
        self.vpc_subnet_port = vpc_subnet_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
        self.request_parameter = request_parameter
        VapiStruct.__init__(self)

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

ChildVpcSubnetPort._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_vpc_subnet_port', {
        'VpcSubnetPort': type.OptionalType(type.ReferenceType(__name__, 'VpcSubnetPort')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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()),
        'request_parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyRequestParameter')])),
    },
    ChildVpcSubnetPort,
    False,
    None))



class CidrArrayConstraintValue(VapiStruct):
    """
    List of CIDR values

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "CidrArrayConstraintValue"
    """
    Identifier denoting this class, when it is used 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 = {
                            'values': 'values',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 values=None,
                 resource_type='CidrArrayConstraintValue',
                ):
        """
        :type  values: :class:`list` of :class:`str` or ``None``
        :param values: 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  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ConstraintValue.RESOURCE_TYPE_STRINGARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_CIDRARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_INTEGERARRAYCONSTRAINTVALUE`
        """
        self.values = values
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

CidrArrayConstraintValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cidr_array_constraint_value', {
        'values': type.OptionalType(type.ListType(type.StringType())),
        'resource_type': type.StringType(),
    },
    CidrArrayConstraintValue,
    False,
    None))



class CipherSuite(VapiStruct):
    """
    HTTP cipher suite

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



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'name': 'name',
                            }

    def __init__(self,
                 enabled=None,
                 name=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable status for this cipher suite
        :type  name: :class:`str` or ``None``
        :param name: Name of the TLS cipher suite
        """
        self.enabled = enabled
        self.name = name
        VapiStruct.__init__(self)


CipherSuite._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cipher_suite', {
        'enabled': type.OptionalType(type.BooleanType()),
        'name': type.OptionalType(type.StringType()),
    },
    CipherSuite,
    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 CloudNativeDeploymentAction(VapiStruct):
    """
    Action to be perform on deployment.

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


    """
    ACTION_UNDEPLOY = "UNDEPLOY"
    """


    """
    ACTION_REDEPLOY = "REDEPLOY"
    """


    """
    ACTION_UPDATE_FORMFACTOR = "UPDATE_FORMFACTOR"
    """


    """
    ACTION_REDEPLOY_UPDATE_FORMFACTOR = "REDEPLOY_UPDATE_FORMFACTOR"
    """


    """
    ACTION_FORCE_UNDEPLOY = "FORCE_UNDEPLOY"
    """


    """
    ACTION_RESTART = "RESTART"
    """


    """
    ACTION_RESET = "RESET"
    """


    """
    ACTION_RESET_BR_VERSION = "RESET_BR_VERSION"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            }

    def __init__(self,
                 action=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`CloudNativeDeploymentAction.ACTION_DEPLOY`
            * :attr:`CloudNativeDeploymentAction.ACTION_UNDEPLOY`
            * :attr:`CloudNativeDeploymentAction.ACTION_REDEPLOY`
            * :attr:`CloudNativeDeploymentAction.ACTION_UPDATE_FORMFACTOR`
            *
              :attr:`CloudNativeDeploymentAction.ACTION_REDEPLOY_UPDATE_FORMFACTOR`
            * :attr:`CloudNativeDeploymentAction.ACTION_FORCE_UNDEPLOY`
            * :attr:`CloudNativeDeploymentAction.ACTION_RESTART`
            * :attr:`CloudNativeDeploymentAction.ACTION_RESET`
            * :attr:`CloudNativeDeploymentAction.ACTION_RESET_BR_VERSION`
            
            Action can be deploy or undeploy. DEPLOY - Deploy NSX Application
            Platform charts. UNDEPLOY - Undeploy NSX Application Platform
            charts. REDEPLOY - Redeploy NSX Application Platform charts.
            UPDATE_FORMFACTOR - Upgrade NSX Application Platform charts.
            REDEPLOY_UPDATE_FORMFACTOR - Retry update NSX Application Platform
            charts. FORCE_UNDEPLOY - Undeploy forcefully. RESTART - Restart
            deployment. RESET - Reset deployment. RESET_BR_VERSION - Reset
            version during Backup/Restore.
        """
        self.action = action
        VapiStruct.__init__(self)


CloudNativeDeploymentAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cloud_native_deployment_action', {
        'action': type.OptionalType(type.StringType()),
    },
    CloudNativeDeploymentAction,
    False,
    None))



class CloudNativeDeploymentConfig(VapiStruct):
    """
    Configuration for NSX Application Platform deployment.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cluster_id': 'cluster_id',
                            'deployment_action': 'deployment_action',
                            'kubeconf_info': 'kubeconf_info',
                            'storage_class': 'storage_class',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cluster_id=None,
                 deployment_action=None,
                 kubeconf_info=None,
                 storage_class=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_id: :class:`str` or ``None``
        :param cluster_id: Unique id to identify kubernetes guest cluster.
        :type  deployment_action: :class:`CloudNativeDeploymentAction` or ``None``
        :param deployment_action: 
        :type  kubeconf_info: :class:`KubeconfigInfo` or ``None``
        :param kubeconf_info: 
        :type  storage_class: :class:`str` or ``None``
        :param storage_class: Kubernetes cluster storage class
        :type  version: :class:`str` or ``None``
        :param version: Deployment version in use.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cluster_id = cluster_id
        self.deployment_action = deployment_action
        self.kubeconf_info = kubeconf_info
        self.storage_class = storage_class
        self.version = version
        VapiStruct.__init__(self)


CloudNativeDeploymentConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cloud_native_deployment_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_id': type.OptionalType(type.StringType()),
        'deployment_action': type.OptionalType(type.ReferenceType(__name__, 'CloudNativeDeploymentAction')),
        'kubeconf_info': type.OptionalType(type.ReferenceType(__name__, 'KubeconfigInfo')),
        'storage_class': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
    },
    CloudNativeDeploymentConfig,
    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_: 
        :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 ClusterControlPlane(VapiStruct):
    """
    Cluster control plane is a hierarchical extension of the NSX-T control
    plane. It allows NSX to manage multiple clusters. There is an instance of
    cluster control plane in each managed cluster. The cluster control plane is
    responsible for the traffic management, span calculation and it can work on
    its own. NSX-T central control plane distributes high-level network
    configurations like security policies and groups to cluster control planes,
    and each cluster control plane computes and realizes the configurations on
    the managed 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'certificate': 'certificate',
                            'node_id': 'node_id',
                            'vhc_path': 'vhc_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 certificate=None,
                 node_id=None,
                 vhc_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: :class:`str` or ``None``
        :param certificate: This property should be afford in create process.
        :type  node_id: :class:`str` or ``None``
        :param node_id: This property is used to identify the cluster control plane in
            NSX-T. This id should assigned by NSX-T in create process.
        :type  vhc_path: :class:`str` or ``None``
        :param vhc_path: This property should be afford in create process for VHC module
            requirement.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.certificate = certificate
        self.node_id = node_id
        self.vhc_path = vhc_path
        VapiStruct.__init__(self)


ClusterControlPlane._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cluster_control_plane', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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': type.OptionalType(type.StringType()),
        'node_id': type.OptionalType(type.StringType()),
        'vhc_path': type.OptionalType(type.StringType()),
    },
    ClusterControlPlane,
    False,
    None))



class ClusterControlPlaneListResult(VapiStruct):
    """
    Cluster Control Plane 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_: 
        :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:`ClusterControlPlane` or ``None``
        :param results: This property include all cluster control Plane in NSX-T.
            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)


ClusterControlPlaneListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cluster_control_plane_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__, 'ClusterControlPlane'))),
    },
    ClusterControlPlaneListResult,
    False,
    None))



class ClusterMemberDetails(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 = {
                            'cluster_id': 'cluster_id',
                            'cluster_name': 'cluster_name',
                            'namespaces': 'namespaces',
                            }

    def __init__(self,
                 cluster_id=None,
                 cluster_name=None,
                 namespaces=None,
                ):
        """
        :type  cluster_id: :class:`str` or ``None``
        :param cluster_id: The Antrea cluster id of the pod
            This 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_name: :class:`str` or ``None``
        :param cluster_name: The Antrea cluster name of the pod
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  namespaces: :class:`list` of :class:`NamespaceMemberDetails` or ``None``
        :param namespaces: 
        """
        self.cluster_id = cluster_id
        self.cluster_name = cluster_name
        self.namespaces = namespaces
        VapiStruct.__init__(self)


ClusterMemberDetails._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cluster_member_details', {
        'cluster_id': type.OptionalType(type.StringType()),
        'cluster_name': type.OptionalType(type.StringType()),
        'namespaces': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NamespaceMemberDetails'))),
    },
    ClusterMemberDetails,
    False,
    None))



class ClusterRestoreStatus(VapiStruct):
    """
    Cluster restore status

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


    """



    _canonical_to_pep_names = {
                            'allowed_actions': 'allowed_actions',
                            'backup_timestamp': 'backup_timestamp',
                            'endpoints': 'endpoints',
                            'id': 'id',
                            'instructions': 'instructions',
                            'not_allowed_actions': 'not_allowed_actions',
                            'restore_end_time': 'restore_end_time',
                            'restore_start_time': 'restore_start_time',
                            'status': 'status',
                            'step': 'step',
                            'total_steps': 'total_steps',
                            }

    def __init__(self,
                 allowed_actions=None,
                 backup_timestamp=None,
                 endpoints=None,
                 id=None,
                 instructions=None,
                 not_allowed_actions=None,
                 restore_end_time=None,
                 restore_start_time=None,
                 status=None,
                 step=None,
                 total_steps=None,
                ):
        """
        :type  allowed_actions: :class:`list` of :class:`str` or ``None``
        :param allowed_actions: List of actions that are 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  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  not_allowed_actions: :class:`list` of :class:`str` or ``None``
        :param not_allowed_actions: Possible values are: 
            
            * :attr:`ClusterRestoreStatus.NOT_ALLOWED_ACTIONS_UPDATES`
            
            List of actions that are not 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  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.allowed_actions = allowed_actions
        self.backup_timestamp = backup_timestamp
        self.endpoints = endpoints
        self.id = id
        self.instructions = instructions
        self.not_allowed_actions = not_allowed_actions
        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', {
        'allowed_actions': type.OptionalType(type.ListType(type.StringType())),
        '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'))),
        'not_allowed_actions': type.OptionalType(type.ListType(type.StringType())),
        '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: 
        :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 CommonAgentEndpointInfo(VapiStruct):
    """
    An endpoint to connect to Kafka/ingress of the NSX Application Platform.
    Either FQDN or IP address can be used in the endpoint info.

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



    _canonical_to_pep_names = {
                            'address': 'address',
                            'port': 'port',
                            }

    def __init__(self,
                 address=None,
                 port=None,
                ):
        """
        :type  address: :class:`str` or ``None``
        :param address: The IP address or the full qualified domain name of Kafka
            broker/ingress. format: hostname-or-ip
        :type  port: :class:`long` or ``None``
        :param port: The port number where the broker is listening to. format: int64
        """
        self.address = address
        self.port = port
        VapiStruct.__init__(self)


CommonAgentEndpointInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.common_agent_endpoint_info', {
        'address': type.OptionalType(type.StringType()),
        'port': type.OptionalType(type.IntegerType()),
    },
    CommonAgentEndpointInfo,
    False,
    None))



class CommonAgentHostConfigurationInfo(VapiStruct):
    """
    NSX Application Platform Common Agent configuration that can be applied to
    host nodes.

    .. 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',
                            'ingress_certificate': 'ingress_certificate',
                            'ingress_endpoint': 'ingress_endpoint',
                            'kafka_certificate': 'kafka_certificate',
                            'kafka_endpoint': 'kafka_endpoint',
                            'nsx_cluster_id': 'nsx_cluster_id',
                            'private_ip_range': 'private_ip_range',
                            'site_id': 'site_id',
                            'truststore': 'truststore',
                            }

    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,
                 ingress_certificate=None,
                 ingress_endpoint=None,
                 kafka_certificate=None,
                 kafka_endpoint=None,
                 nsx_cluster_id=None,
                 private_ip_range=None,
                 site_id=None,
                 truststore=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  ingress_certificate: :class:`str` or ``None``
        :param ingress_certificate: A ingress certificate to verify the identity of brokers.
        :type  ingress_endpoint: :class:`list` of :class:`CommonAgentEndpointInfo` or ``None``
        :param ingress_endpoint: List of NSX Application Platform ingress endpoints that host nodes
            contact initially.
        :type  kafka_certificate: :class:`str` or ``None``
        :param kafka_certificate: A Kafka broker certificate to verify the identity of brokers.
        :type  kafka_endpoint: :class:`list` of :class:`CommonAgentEndpointInfo` or ``None``
        :param kafka_endpoint: List of NSX Application Platform broker endpoints that host nodes
            contact initially.
        :type  nsx_cluster_id: :class:`str` or ``None``
        :param nsx_cluster_id: Cluster id of the NSX Manager cluster.
        :type  private_ip_range: :class:`list` of :class:`CommonAgentPrivateIpRangeInfo` or ``None``
        :param private_ip_range: List of private IP prefix that NSX Application Platform Common
            Agent network flow is collected from.
        :type  site_id: :class:`str` or ``None``
        :param site_id: Site id of the local manager.
        :type  truststore: :class:`str` or ``None``
        :param truststore: A truststore to establish the trust between NSX and NSX Application
            Platform.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.ingress_certificate = ingress_certificate
        self.ingress_endpoint = ingress_endpoint
        self.kafka_certificate = kafka_certificate
        self.kafka_endpoint = kafka_endpoint
        self.nsx_cluster_id = nsx_cluster_id
        self.private_ip_range = private_ip_range
        self.site_id = site_id
        self.truststore = truststore
        VapiStruct.__init__(self)


CommonAgentHostConfigurationInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.common_agent_host_configuration_info', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'ingress_certificate': type.OptionalType(type.StringType()),
        'ingress_endpoint': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommonAgentEndpointInfo'))),
        'kafka_certificate': type.OptionalType(type.StringType()),
        'kafka_endpoint': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommonAgentEndpointInfo'))),
        'nsx_cluster_id': type.OptionalType(type.StringType()),
        'private_ip_range': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommonAgentPrivateIpRangeInfo'))),
        'site_id': type.OptionalType(type.StringType()),
        'truststore': type.OptionalType(type.StringType()),
    },
    CommonAgentHostConfigurationInfo,
    False,
    None))



class CommonAgentPrivateIpRangeInfo(VapiStruct):
    """
    An IP prefix to mark the private network that NSX Application Platform
    Common Agent network flow is collected from.

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


    """
    ADDRESS_TYPE_IPV6 = "IPV6"
    """


    """



    _canonical_to_pep_names = {
                            'address': 'address',
                            'address_type': 'address_type',
                            'prefix_length': 'prefix_length',
                            }

    def __init__(self,
                 address=None,
                 address_type=None,
                 prefix_length=None,
                ):
        """
        :type  address: :class:`str` or ``None``
        :param address: The prefix of IP address that marks the range of private network.
            format: ip
        :type  address_type: :class:`str` or ``None``
        :param address_type: Possible values are: 
            
            * :attr:`CommonAgentPrivateIpRangeInfo.ADDRESS_TYPE_IPV4`
            * :attr:`CommonAgentPrivateIpRangeInfo.ADDRESS_TYPE_IPV6`
            
            The type of IP address.
        :type  prefix_length: :class:`long` or ``None``
        :param prefix_length: The length of IP address prefix that marks the range of private
            network. format: int64
        """
        self.address = address
        self.address_type = address_type
        self.prefix_length = prefix_length
        VapiStruct.__init__(self)


CommonAgentPrivateIpRangeInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.common_agent_private_ip_range_info', {
        'address': type.OptionalType(type.StringType()),
        'address_type': type.OptionalType(type.StringType()),
        'prefix_length': type.OptionalType(type.IntegerType()),
    },
    CommonAgentPrivateIpRangeInfo,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate the rule. Default is activated.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is deactivated.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 CompatibilityCheckResult(VapiStruct):
    """
    Result of prechecks run for onboarding standby Global Manager or remote
    site. The checks include NSX version compatibility with active Global
    Manager, Round Trip Time (RTT), etc. Note that some of checks like RTT are
    soft limits.

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



    _canonical_to_pep_names = {
                            'local_nsx_version': 'local_nsx_version',
                            'nsx_version': 'nsx_version',
                            'rtt': 'rtt',
                            'rtt_exceeded': 'rtt_exceeded',
                            'version_compatible': 'version_compatible',
                            }

    def __init__(self,
                 local_nsx_version=None,
                 nsx_version=None,
                 rtt=None,
                 rtt_exceeded=None,
                 version_compatible=None,
                ):
        """
        :type  local_nsx_version: :class:`str` or ``None``
        :param local_nsx_version: Local Site NSX version where active Global Mananger is running.
            This 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_version: :class:`str` or ``None``
        :param nsx_version: Remote Site NSX 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  rtt: :class:`long` or ``None``
        :param rtt: Round trip time to the remote Site or Global Manager from active
            Global Manager. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rtt_exceeded: :class:`bool` or ``None``
        :param rtt_exceeded: Flag to indicate if RTT to remote Site exceeds the recommended
            limit.
            This 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_compatible: :class:`bool` or ``None``
        :param version_compatible: Flag to indicate if remote Site NSX version is compatible with
            active 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.
        """
        self.local_nsx_version = local_nsx_version
        self.nsx_version = nsx_version
        self.rtt = rtt
        self.rtt_exceeded = rtt_exceeded
        self.version_compatible = version_compatible
        VapiStruct.__init__(self)


CompatibilityCheckResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.compatibility_check_result', {
        'local_nsx_version': type.OptionalType(type.StringType()),
        'nsx_version': type.OptionalType(type.StringType()),
        'rtt': type.OptionalType(type.IntegerType()),
        'rtt_exceeded': type.OptionalType(type.BooleanType()),
        'version_compatible': type.OptionalType(type.BooleanType()),
    },
    CompatibilityCheckResult,
    False,
    None))



class ComponentConditionItem(VapiStruct):
    """
    This indicate component health condition and the reason why not healthy.

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


    """
    CONDITION_TYPE_MP_ADAPTER_HEALTHY = "MP_ADAPTER_HEALTHY"
    """


    """
    CONDITION_TYPE_MP_CONNECTED = "MP_CONNECTED"
    """


    """
    CONDITION_TYPE_CCP_ADAPTER_HEALTHY = "CCP_ADAPTER_HEALTHY"
    """


    """
    CONDITION_TYPE_CCP_SESSION_STATE_UP = "CCP_SESSION_STATE_UP"
    """


    """
    STATUS_HEALTHY = "HEALTHY"
    """


    """
    STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """



    _canonical_to_pep_names = {
                            'condition_type': 'condition_type',
                            'last_heartbeat_time': 'last_heartbeat_time',
                            'message': 'message',
                            'reason': 'reason',
                            'status': 'status',
                            }

    def __init__(self,
                 condition_type=None,
                 last_heartbeat_time=None,
                 message=None,
                 reason=None,
                 status=None,
                ):
        """
        :type  condition_type: :class:`str` or ``None``
        :param condition_type: Possible values are: 
            
            * :attr:`ComponentConditionItem.CONDITION_TYPE_CONTROLLER_HEALTHY`
            * :attr:`ComponentConditionItem.CONDITION_TYPE_MP_ADAPTER_HEALTHY`
            * :attr:`ComponentConditionItem.CONDITION_TYPE_MP_CONNECTED`
            * :attr:`ComponentConditionItem.CONDITION_TYPE_CCP_ADAPTER_HEALTHY`
            *
              :attr:`ComponentConditionItem.CONDITION_TYPE_CCP_SESSION_STATE_UP`
            
            Indicate which component condition it is.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_heartbeat_time: :class:`long` or ``None``
        :param last_heartbeat_time: Time unit is millisecond. format: int64
        :type  message: :class:`str` or ``None``
        :param message: Additional condition information.
        :type  reason: :class:`str` or ``None``
        :param reason: Indicate why not healthy.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`ComponentConditionItem.STATUS_HEALTHY`
            * :attr:`ComponentConditionItem.STATUS_UNHEALTHY`
            
            Indicate healthy or unhealthy.
        """
        self.condition_type = condition_type
        self.last_heartbeat_time = last_heartbeat_time
        self.message = message
        self.reason = reason
        self.status = status
        VapiStruct.__init__(self)


ComponentConditionItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.component_condition_item', {
        'condition_type': type.OptionalType(type.StringType()),
        'last_heartbeat_time': type.OptionalType(type.IntegerType()),
        'message': type.OptionalType(type.StringType()),
        'reason': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    ComponentConditionItem,
    False,
    None))



class ComputeClusterIdfwConfiguration(VapiStruct):
    """
    Idfw configuration for activate/deactivate 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cluster_idfw_enabled': 'cluster_idfw_enabled',
                            'is_stale': 'is_stale',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cluster_idfw_enabled=None,
                 is_stale=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  is_stale: :class:`bool` or ``None``
        :param is_stale: If set to true, this cluster has been deleted from 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  member: :class:`PolicyResourceReference` or ``None``
        :param member: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.is_stale = is_stale
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'is_stale': 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_: 
        :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 ComputeManagerTopology(VapiStruct):
    """
    Details where NVDS will be migrated to

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



    _canonical_to_pep_names = {
                            'compute_manager_id': 'compute_manager_id',
                            'dvswitch': 'dvswitch',
                            }

    def __init__(self,
                 compute_manager_id=None,
                 dvswitch=None,
                ):
        """
        :type  compute_manager_id: :class:`str` or ``None``
        :param compute_manager_id: Identifier of vcenter where VDS will be created
        :type  dvswitch: :class:`list` of :class:`VdsTopology` or ``None``
        :param dvswitch: Datacenter, VDS mapping
        """
        self.compute_manager_id = compute_manager_id
        self.dvswitch = dvswitch
        VapiStruct.__init__(self)


ComputeManagerTopology._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.compute_manager_topology', {
        'compute_manager_id': type.OptionalType(type.StringType()),
        'dvswitch': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VdsTopology'))),
    },
    ComputeManagerTopology,
    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"
    """


    """
    KEY_NODETYPE = "NodeType"
    """


    """
    KEY_GROUPTYPE = "GroupType"
    """


    """
    KEY_ALL = "ALL"
    """


    """
    KEY_IPADDRESS = "IPAddress"
    """


    """
    KEY_PODCIDR = "PodCidr"
    """


    """
    MEMBER_TYPE_IPSET = "IPSet"
    """


    """
    MEMBER_TYPE_VIRTUALMACHINE = "VirtualMachine"
    """


    """
    MEMBER_TYPE_LOGICALPORT = "LogicalPort"
    """


    """
    MEMBER_TYPE_LOGICALSWITCH = "LogicalSwitch"
    """


    """
    MEMBER_TYPE_SEGMENT = "Segment"
    """


    """
    MEMBER_TYPE_SEGMENTPORT = "SegmentPort"
    """


    """
    MEMBER_TYPE_POD = "Pod"
    """


    """
    MEMBER_TYPE_SERVICE = "Service"
    """


    """
    MEMBER_TYPE_NAMESPACE = "Namespace"
    """


    """
    MEMBER_TYPE_TRANSPORTNODE = "TransportNode"
    """


    """
    MEMBER_TYPE_GROUP = "Group"
    """


    """
    MEMBER_TYPE_DVPG = "DVPG"
    """


    """
    MEMBER_TYPE_DVPORT = "DVPort"
    """


    """
    MEMBER_TYPE_IPADDRESS = "IPAddress"
    """


    """
    MEMBER_TYPE_VPCSUBNET = "VpcSubnet"
    """


    """
    MEMBER_TYPE_KUBERNETESCLUSTER = "KubernetesCluster"
    """


    """
    MEMBER_TYPE_KUBERNETESNAMESPACE = "KubernetesNamespace"
    """


    """
    MEMBER_TYPE_ANTREAEGRESS = "AntreaEgress"
    """


    """
    MEMBER_TYPE_ANTREAIPPOOL = "AntreaIPPool"
    """


    """
    MEMBER_TYPE_KUBERNETESINGRESS = "KubernetesIngress"
    """


    """
    MEMBER_TYPE_KUBERNETESGATEWAY = "KubernetesGateway"
    """


    """
    MEMBER_TYPE_KUBERNETESSERVICE = "KubernetesService"
    """


    """
    MEMBER_TYPE_KUBERNETESNODE = "KubernetesNode"
    """


    """
    MEMBER_TYPE_VPCSUBNETPORT = "VpcSubnetPort"
    """


    """
    OPERATOR_EQUALS = "EQUALS"
    """


    """
    OPERATOR_CONTAINS = "CONTAINS"
    """


    """
    OPERATOR_STARTSWITH = "STARTSWITH"
    """


    """
    OPERATOR_ENDSWITH = "ENDSWITH"
    """


    """
    OPERATOR_NOTEQUALS = "NOTEQUALS"
    """


    """
    OPERATOR_NOTIN = "NOTIN"
    """


    """
    OPERATOR_MATCHES = "MATCHES"
    """


    """
    OPERATOR_IN = "IN"
    """


    """
    SCOPE_OPERATOR_EQUALS = "EQUALS"
    """


    """
    SCOPE_OPERATOR_NOTEQUALS = "NOTEQUALS"
    """


    """



    _canonical_to_pep_names = {
                            'exclude': 'exclude',
                            'key': 'key',
                            'member_type': 'member_type',
                            'operator': 'operator',
                            'scope_operator': 'scope_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 exclude=None,
                 key=None,
                 member_type=None,
                 operator=None,
                 scope_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  exclude: :class:`ExcludedMembersList` or ``None``
        :param exclude: 
        :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`
            * :attr:`Condition.KEY_NODETYPE`
            * :attr:`Condition.KEY_GROUPTYPE`
            * :attr:`Condition.KEY_ALL`
            * :attr:`Condition.KEY_IPADDRESS`
            * :attr:`Condition.KEY_PODCIDR`
            
            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`
            * :attr:`Condition.MEMBER_TYPE_POD`
            * :attr:`Condition.MEMBER_TYPE_SERVICE`
            * :attr:`Condition.MEMBER_TYPE_NAMESPACE`
            * :attr:`Condition.MEMBER_TYPE_TRANSPORTNODE`
            * :attr:`Condition.MEMBER_TYPE_GROUP`
            * :attr:`Condition.MEMBER_TYPE_DVPG`
            * :attr:`Condition.MEMBER_TYPE_DVPORT`
            * :attr:`Condition.MEMBER_TYPE_IPADDRESS`
            * :attr:`Condition.MEMBER_TYPE_VPCSUBNET`
            * :attr:`Condition.MEMBER_TYPE_KUBERNETESCLUSTER`
            * :attr:`Condition.MEMBER_TYPE_KUBERNETESNAMESPACE`
            * :attr:`Condition.MEMBER_TYPE_ANTREAEGRESS`
            * :attr:`Condition.MEMBER_TYPE_ANTREAIPPOOL`
            * :attr:`Condition.MEMBER_TYPE_KUBERNETESINGRESS`
            * :attr:`Condition.MEMBER_TYPE_KUBERNETESGATEWAY`
            * :attr:`Condition.MEMBER_TYPE_KUBERNETESSERVICE`
            * :attr:`Condition.MEMBER_TYPE_KUBERNETESNODE`
            * :attr:`Condition.MEMBER_TYPE_VPCSUBNETPORT`
            
            For global groups (groups created from Global Manager), the
            supported Member Types are - VirtualMachine, Segment, SegmentPort,
            Group, DVPG and DVPort. For local groups (groups created on the
            local policy manager), the supported member types are IPSet,
            VirtualMachine, LogicalPort, LogicalSwitch, Segment, SegmentPort,
            Pod, Service, Namespace, TransportNode, Group, DVPG, DVPort,
            KubernetesCluster, KubernetesNamespace, AntreaEgress, AntreaIPPool,
            KubernetesIngress, KubernetesGateway, KubernetesService and
            KubernetesNode.
        :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`
            * :attr:`Condition.OPERATOR_NOTIN`
            * :attr:`Condition.OPERATOR_MATCHES`
            * :attr:`Condition.OPERATOR_IN`
            
            Operator is made non-mandatory to support Segment and SegmentPort
            tag based expression. To evaluate expression for other types,
            operator value should be provided.
        :type  scope_operator: :class:`str` or ``None``
        :param scope_operator: Possible values are: 
            
            * :attr:`Condition.SCOPE_OPERATOR_EQUALS`
            * :attr:`Condition.SCOPE_OPERATOR_NOTEQUALS`
            
            Default operator when not specified explicitly would be considered
            as EQUALS. If value for Condition is empty, then condition will not
            be evaluated. For example, Condition with key as Tag and value as
            \"|tag\" would be evaluated for tag value not for empty scope
            value.
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.exclude = exclude
        self.key = key
        self.member_type = member_type
        self.operator = operator
        self.scope_operator = scope_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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', {
        'exclude': type.OptionalType(type.ReferenceType(__name__, 'ExcludedMembersList')),
        'key': type.OptionalType(type.StringType()),
        'member_type': type.OptionalType(type.StringType()),
        'operator': type.OptionalType(type.StringType()),
        'scope_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_INCLUDES_ANY = "INCLUDES_ANY"
    """


    """
    OPERATOR_EXCLUDES = "EXCLUDES"
    """


    """
    OPERATOR_EQUALS = "EQUALS"
    """


    """



    _canonical_to_pep_names = {
                            'operator': 'operator',
                            'rhs_value': 'rhs_value',
                            'rhs_value_with_type': 'rhs_value_with_type',
                            'value_constraint': 'value_constraint',
                            }

    def __init__(self,
                 operator=None,
                 rhs_value=None,
                 rhs_value_with_type=None,
                 value_constraint=None,
                ):
        """
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`ConditionalValueConstraintExpression.OPERATOR_INCLUDES`
            *
              :attr:`ConditionalValueConstraintExpression.OPERATOR_INCLUDES_ANY`
            * :attr:`ConditionalValueConstraintExpression.OPERATOR_EXCLUDES`
            * :attr:`ConditionalValueConstraintExpression.OPERATOR_EQUALS`
            
            INCLUDES_ANY operator supported only for StringArrayConstraintValue
        :type  rhs_value: :class:`list` of :class:`str` or ``None``
        :param rhs_value: List of values.
        :type  rhs_value_with_type: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param rhs_value_with_type: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ConstraintValue`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`ConstraintValue`.
        :type  value_constraint: :class:`ValueConstraintExpression` or ``None``
        :param value_constraint: 
        """
        self.operator = operator
        self.rhs_value = rhs_value
        self.rhs_value_with_type = rhs_value_with_type
        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())),
        'rhs_value_with_type': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ConstraintValue')])),
        '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"
    """


    """
    STATE_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """



    _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`
            * :attr:`ConfigurationState.STATE_REPLACE_FAILED`
            *
              :attr:`ConfigurationState.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`ConfigurationState.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            * :attr:`ConfigurationState.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            * :attr:`ConfigurationState.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`ConfigurationState.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            * :attr:`ConfigurationState.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`ConfigurationState.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`ConfigurationState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`ConfigurationState.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`ConfigurationState.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`ConfigurationState.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`ConfigurationState.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`ConfigurationState.STATE_COMPUTE_MANAGER_NOT_FOUND`
            * :attr:`ConfigurationState.STATE_DELETE_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`ConfigurationState.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`ConfigurationState.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`ConfigurationState.STATE_MAINTENANCE_MODE_ENABLED`
            * :attr:`ConfigurationState.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`ConfigurationState.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            * :attr:`ConfigurationState.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            * :attr:`ConfigurationState.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`ConfigurationState.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            * :attr:`ConfigurationState.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            * :attr:`ConfigurationState.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            * :attr:`ConfigurationState.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`ConfigurationState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`ConfigurationState.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`ConfigurationState.STATE_REDEPLOY_ACTIVITY_FAILED`
            * :attr:`ConfigurationState.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            * :attr:`ConfigurationState.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`ConfigurationState.STATE_REPLACE_ACTIVITY_FAILED`
            * :attr:`ConfigurationState.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_REPLACE_ACTIVITY_SCHEDULED`
            * :attr:`ConfigurationState.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`ConfigurationState.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`ConfigurationState.STATE_RETRYING_REPLACE`
            *
              :attr:`ConfigurationState.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`ConfigurationState.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`ConfigurationState.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`ConfigurationState.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    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_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_PENDING = "pending"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """
    STATE_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATE_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    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_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATE_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATE_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    STATE_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    STATE_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """



    _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_REPLACE_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`ConfigurationStateElement.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            *
              :attr:`ConfigurationStateElement.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            * :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_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`ConfigurationStateElement.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`ConfigurationStateElement.STATE_MAINTENANCE_MODE_ENABLED`
            *
              :attr:`ConfigurationStateElement.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`ConfigurationStateElement.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            *
              :attr:`ConfigurationStateElement.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            * :attr:`ConfigurationStateElement.STATE_PENDING`
            * :attr:`ConfigurationStateElement.STATE_ORPHANED`
            * :attr:`ConfigurationStateElement.STATE_UNKNOWN`
            * :attr:`ConfigurationStateElement.STATE_ERROR`
            * :attr:`ConfigurationStateElement.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`ConfigurationStateElement.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`ConfigurationStateElement.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`ConfigurationStateElement.STATE_REGISTRATION_PENDING`
            * :attr:`ConfigurationStateElement.STATE_NODE_NOT_READY`
            * :attr:`ConfigurationStateElement.STATE_NODE_READY`
            * :attr:`ConfigurationStateElement.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`ConfigurationStateElement.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`ConfigurationStateElement.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`ConfigurationStateElement.STATE_VM_DEPLOYMENT_RESTARTED`
            *
              :attr:`ConfigurationStateElement.STATE_TRANSPORT_NODE_SYNC_PENDING`
            * :attr:`ConfigurationStateElement.STATE_TRANSPORT_NODE_READY`
            *
              :attr:`ConfigurationStateElement.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`ConfigurationStateElement.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`ConfigurationStateElement.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`ConfigurationStateElement.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`ConfigurationStateElement.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`ConfigurationStateElement.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`ConfigurationStateElement.STATE_COMPUTE_MANAGER_NOT_FOUND`
            *
              :attr:`ConfigurationStateElement.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`ConfigurationStateElement.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            *
              :attr:`ConfigurationStateElement.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            *
              :attr:`ConfigurationStateElement.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            * :attr:`ConfigurationStateElement.STATE_DELETE_IN_PROGRESS`
            *
              :attr:`ConfigurationStateElement.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`ConfigurationStateElement.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`ConfigurationStateElement.STATE_REDEPLOY_ACTIVITY_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            *
              :attr:`ConfigurationStateElement.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            *
              :attr:`ConfigurationStateElement.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`ConfigurationStateElement.STATE_REPLACE_ACTIVITY_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            *
              :attr:`ConfigurationStateElement.STATE_REPLACE_ACTIVITY_SCHEDULED`
            *
              :attr:`ConfigurationStateElement.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`ConfigurationStateElement.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`ConfigurationStateElement.STATE_RETRYING_REPLACE`
            *
              :attr:`ConfigurationStateElement.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`ConfigurationStateElement.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`ConfigurationStateElement.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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) Tier-0/Tier1 segment from corresponding gateway. This
            property does not apply to VLAN backed segments. VLAN backed
            segments with connectivity OFF does not affect its layer-2
            connectivity.
        """
        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_: 
        :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',
                            'publish_time': 'publish_time',
                            'site_uuid': 'site_uuid',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    def __init__(self,
                 intent_path=None,
                 consolidated_status=None,
                 consolidated_status_per_enforcement_point=None,
                 intent_version=None,
                 publish_status=None,
                 publish_time=None,
                 site_uuid=None,
                 time_taken_for_realization=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: 
        :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
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This 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_uuid: :class:`str` or ``None``
        :param site_uuid: Site UUID supplied for realized site.
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization. format: int64
        """
        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
        self.publish_time = publish_time
        self.site_uuid = site_uuid
        self.time_taken_for_realization = time_taken_for_realization
        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()),
        'publish_time': type.OptionalType(type.IntegerType()),
        'site_uuid': type.OptionalType(type.StringType()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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"
    """


    """
    CONSOLIDATED_STATUS_SANDBOXED_REALIZATION_PENDING = "SANDBOXED_REALIZATION_PENDING"
    """


    """



    _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`
            *
              :attr:`ConsolidatedStatus.CONSOLIDATED_STATUS_SANDBOXED_REALIZATION_PENDING`
            
            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: 
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: 
        :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: 
        :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: 
        :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: 
        :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.
    """
    TARGET_OWNER_TYPE_GM = "GM"
    """


    """
    TARGET_OWNER_TYPE_LM = "LM"
    """


    """
    TARGET_OWNER_TYPE_ALL = "ALL"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'constraint_expression': 'constraint_expression',
                            'constraint_expressions': 'constraint_expressions',
                            'message': 'message',
                            'target': 'target',
                            'target_owner_type': 'target_owner_type',
                            'targets': '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 constraint_expression=None,
                 constraint_expressions=None,
                 message=None,
                 target=None,
                 target_owner_type=None,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
            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  constraint_expressions: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param constraint_expressions: Expressions 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: 
        :type  target_owner_type: :class:`str` or ``None``
        :param target_owner_type: Possible values are: 
            
            * :attr:`Constraint.TARGET_OWNER_TYPE_GM`
            * :attr:`Constraint.TARGET_OWNER_TYPE_LM`
            * :attr:`Constraint.TARGET_OWNER_TYPE_ALL`
            
            Constraint target's owner type
        :type  targets: :class:`list` of :class:`ConstraintTarget` or ``None``
        :param targets: Collection of target resources 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.constraint_expressions = constraint_expressions
        self.message = message
        self.target = target
        self.target_owner_type = target_owner_type
        self.targets = targets
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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')])),
        'constraint_expressions': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ConstraintExpression')]))),
        'message': type.OptionalType(type.StringType()),
        'target': type.OptionalType(type.ReferenceType(__name__, 'ConstraintTarget')),
        'target_owner_type': type.OptionalType(type.StringType()),
        'targets': type.OptionalType(type.ListType(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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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 ConstraintGlobalConfig(VapiStruct):
    """
    Global Constraint 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'include_system_resources': 'include_system_resources',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 include_system_resources=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  include_system_resources: :class:`bool` or ``None``
        :param include_system_resources: If true, resources that are created by the system (i.e create_user
            set to SYSTEM_USER) will be included as part of counting the
            created entity instances while evaulating the
            EntityInstanceCountConstraintExpression type constraint. By
            default, these resources are not included as part of evaluating the
            count expression
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.include_system_resources = include_system_resources
        VapiStruct.__init__(self)


ConstraintGlobalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.constraint_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'include_system_resources': type.OptionalType(type.BooleanType()),
    },
    ConstraintGlobalConfig,
    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_: 
        :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: 
        :type  target_resource_type: :class:`str` or ``None``
        :param target_resource_type: Target resource type accepts input as DTO Type and or FQDN. It also
            supports dot format like SecurityPolicy.Rule in a scenario where
            same DTO type shared across across policy sub tree. For example DTO
            type Rule shared by both security policy and gateway policy rules.
            So to specify any constraint for Security policy rule, user can
            define the target resource type as SecurityPolicy.Rule.
        """
        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 ConstraintValue(VapiStruct):
    """
    All the types of value 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 = "ConstraintValue"
    """
    Identifier denoting this class, when it is used 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_STRINGARRAYCONSTRAINTVALUE = "StringArrayConstraintValue"
    """


    """
    RESOURCE_TYPE_CIDRARRAYCONSTRAINTVALUE = "CidrArrayConstraintValue"
    """


    """
    RESOURCE_TYPE_INTEGERARRAYCONSTRAINTVALUE = "IntegerArrayConstraintValue"
    """


    """



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

    def __init__(self,
                 resource_type='ConstraintValue',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ConstraintValue.RESOURCE_TYPE_STRINGARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_CIDRARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_INTEGERARRAYCONSTRAINTVALUE`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class ContainerClusterStatus(VapiStruct):
    """


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


    """
    STATUS_HEALTHY = "HEALTHY"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'cluster_id': 'cluster_id',
                            'detail': 'detail',
                            'interval': 'interval',
                            'status': 'status',
                            }

    def __init__(self,
                 cluster_id=None,
                 detail=None,
                 interval=None,
                 status=None,
                ):
        """
        :type  cluster_id: :class:`str` or ``None``
        :param cluster_id: Identifier of the container cluster.
        :type  detail: :class:`str` or ``None``
        :param detail: Detail information on status.
        :type  interval: :class:`long` or ``None``
        :param interval: Display the cluster check interval in seconds. 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  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`ContainerClusterStatus.STATUS_UNKNOWN`
            * :attr:`ContainerClusterStatus.STATUS_HEALTHY`
            * :attr:`ContainerClusterStatus.STATUS_DOWN`
            * :attr:`ContainerClusterStatus.STATUS_DEGRADED`
            
            Display the container cluster status.
        """
        self.cluster_id = cluster_id
        self.detail = detail
        self.interval = interval
        self.status = status
        VapiStruct.__init__(self)


ContainerClusterStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_cluster_status', {
        'cluster_id': type.OptionalType(type.StringType()),
        'detail': type.OptionalType(type.StringType()),
        'interval': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
    },
    ContainerClusterStatus,
    False,
    None))



class ContainerClusterStatusList(VapiStruct):
    """
    List of the Container 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_: 
        :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:`ContainerClusterSummary` or ``None``
        :param results: Container cluster 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)


ContainerClusterStatusList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_cluster_status_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__, 'ContainerClusterSummary'))),
    },
    ContainerClusterStatusList,
    False,
    None))



class ContainerClusterSummary(VapiStruct):
    """


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


    """
    STATUS_HEALTHY = "HEALTHY"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    TYPE_PAS = "PAS"
    """


    """
    TYPE_PKS = "PKS"
    """


    """
    TYPE_KUBERNETES = "Kubernetes"
    """


    """
    TYPE_OPENSHIFT = "Openshift"
    """


    """
    TYPE_WCP = "WCP"
    """


    """
    TYPE_OTHER = "Other"
    """


    """



    _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',
                            'cluster_id': 'cluster_id',
                            'cluster_name': 'cluster_name',
                            'detail': 'detail',
                            'status': 'status',
                            '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,
                 cluster_id=None,
                 cluster_name=None,
                 detail=None,
                 status=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  cluster_id: :class:`str` or ``None``
        :param cluster_id: Identifier of the container 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.
        :type  cluster_name: :class:`str` or ``None``
        :param cluster_name: Display the container cluster name
        :type  detail: :class:`str` or ``None``
        :param detail: Detail information on 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:`ContainerClusterSummary.STATUS_UNKNOWN`
            * :attr:`ContainerClusterSummary.STATUS_HEALTHY`
            * :attr:`ContainerClusterSummary.STATUS_DOWN`
            * :attr:`ContainerClusterSummary.STATUS_DEGRADED`
            
            Display the container cluster status.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`ContainerClusterSummary.TYPE_PAS`
            * :attr:`ContainerClusterSummary.TYPE_PKS`
            * :attr:`ContainerClusterSummary.TYPE_KUBERNETES`
            * :attr:`ContainerClusterSummary.TYPE_OPENSHIFT`
            * :attr:`ContainerClusterSummary.TYPE_WCP`
            * :attr:`ContainerClusterSummary.TYPE_OTHER`
            
            Container cluster 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.cluster_id = cluster_id
        self.cluster_name = cluster_name
        self.detail = detail
        self.status = status
        self.type = type
        VapiStruct.__init__(self)


ContainerClusterSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_cluster_summary', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'cluster_id': type.OptionalType(type.StringType()),
        'cluster_name': type.OptionalType(type.StringType()),
        'detail': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    ContainerClusterSummary,
    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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    ContainerConfiguration,
    False,
    None))



class ContextProfileAttributesMetadata(VapiStruct):
    """
    Key value structure for holding metadata of context profile attributes

    .. 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 for metadata
        :type  value: :class:`str` or ``None``
        :param value: Value for metadata key
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


ContextProfileAttributesMetadata._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.context_profile_attributes_metadata', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    ContextProfileAttributesMetadata,
    False,
    None))



class ControlConnStatus(VapiStruct):
    """


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


    """
    FAILURE_STATUS_INCOMPLETE_HOST_CERT = "INCOMPLETE_HOST_CERT"
    """


    """
    FAILURE_STATUS_INCOMPLETE_CONTROLLER_CERT = "INCOMPLETE_CONTROLLER_CERT"
    """


    """
    FAILURE_STATUS_CONTROLLER_REJECTED_HOST_CERT = "CONTROLLER_REJECTED_HOST_CERT"
    """


    """
    FAILURE_STATUS_HOST_REJECTED_CONTROLLER_CERT = "HOST_REJECTED_CONTROLLER_CERT"
    """


    """
    FAILURE_STATUS_KEEP_ALIVE_TIMEOUT = "KEEP_ALIVE_TIMEOUT"
    """


    """
    FAILURE_STATUS_OTHER_SSL_ERROR = "OTHER_SSL_ERROR"
    """


    """
    FAILURE_STATUS_OTHER_ERROR = "OTHER_ERROR"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """



    _canonical_to_pep_names = {
                            'control_node_ip': 'control_node_ip',
                            'failure_status': 'failure_status',
                            'status': 'status',
                            }

    def __init__(self,
                 control_node_ip=None,
                 failure_status=None,
                 status=None,
                ):
        """
        :type  control_node_ip: :class:`str` or ``None``
        :param control_node_ip: IP address of the control 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  failure_status: :class:`str` or ``None``
        :param failure_status: Possible values are: 
            
            * :attr:`ControlConnStatus.FAILURE_STATUS_CONNECTION_REFUSED`
            * :attr:`ControlConnStatus.FAILURE_STATUS_INCOMPLETE_HOST_CERT`
            *
              :attr:`ControlConnStatus.FAILURE_STATUS_INCOMPLETE_CONTROLLER_CERT`
            *
              :attr:`ControlConnStatus.FAILURE_STATUS_CONTROLLER_REJECTED_HOST_CERT`
            *
              :attr:`ControlConnStatus.FAILURE_STATUS_HOST_REJECTED_CONTROLLER_CERT`
            * :attr:`ControlConnStatus.FAILURE_STATUS_KEEP_ALIVE_TIMEOUT`
            * :attr:`ControlConnStatus.FAILURE_STATUS_OTHER_SSL_ERROR`
            * :attr:`ControlConnStatus.FAILURE_STATUS_OTHER_ERROR`
            
            Failure status of the control Node for e.g
            CONNECTION_REFUSED,INCOMPLETE_HOST_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  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`ControlConnStatus.STATUS_UP`
            * :attr:`ControlConnStatus.STATUS_DOWN`
            
            Status of the control Node for e.g 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.control_node_ip = control_node_ip
        self.failure_status = failure_status
        self.status = status
        VapiStruct.__init__(self)


ControlConnStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.control_conn_status', {
        'control_node_ip': type.OptionalType(type.StringType()),
        'failure_status': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    ControlConnStatus,
    False,
    None))



class CountActionArgument(VapiStruct):
    """


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


    """
    COUNT_TYPE_BI_DIRECTIONAL = "BI_DIRECTIONAL"
    """


    """
    COUNT_TYPE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'count_type': 'count_type',
                            'dest_lport': 'dest_lport',
                            'reverse_filter': 'reverse_filter',
                            }

    def __init__(self,
                 count_type=None,
                 dest_lport=None,
                 reverse_filter=None,
                ):
        """
        :type  count_type: :class:`str` or ``None``
        :param count_type: Possible values are: 
            
            * :attr:`CountActionArgument.COUNT_TYPE_UNI_DIRECTIONAL`
            * :attr:`CountActionArgument.COUNT_TYPE_BI_DIRECTIONAL`
            * :attr:`CountActionArgument.COUNT_TYPE_UNKNOWN`
            
            Type of count
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dest_lport: :class:`str` or ``None``
        :param dest_lport: It is required only when the type of count is bidirectional. Please
            keep this field aligned with the destination logical port of trace
            action and packet capture action config when the type of trace
            action and packet capture action are bidirectional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reverse_filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param reverse_filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        """
        self.count_type = count_type
        self.dest_lport = dest_lport
        self.reverse_filter = reverse_filter
        VapiStruct.__init__(self)


CountActionArgument._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.count_action_argument', {
        'count_type': type.OptionalType(type.StringType()),
        'dest_lport': type.OptionalType(type.StringType()),
        'reverse_filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
    },
    CountActionArgument,
    False,
    None))



class CountActionConfig(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'action_argument': 'action_argument',
                            }

    def __init__(self,
                 action_argument=None,
                ):
        """
        :type  action_argument: :class:`CountActionArgument` or ``None``
        :param action_argument: 
        """
        self.action_argument = action_argument
        VapiStruct.__init__(self)


CountActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.count_action_config', {
        'action_argument': type.OptionalType(type.ReferenceType(__name__, 'CountActionArgument')),
    },
    CountActionConfig,
    False,
    None))



class CountObservation(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "CountObservation"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='CountObservation',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Type of count observation
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class CounterResult(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'backward_results': 'backward_results',
                            'forward_results': 'forward_results',
                            }

    def __init__(self,
                 backward_results=None,
                 forward_results=None,
                ):
        """
        :type  backward_results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param backward_results: The count action results from the checkpoints traversed by packets
            from the destination port.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`CountObservation`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`CountObservation`.
        :type  forward_results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param forward_results: The count action results from the checkpoints traversed by packets
            from the source port.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`CountObservation`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`CountObservation`.
        """
        self.backward_results = backward_results
        self.forward_results = forward_results
        VapiStruct.__init__(self)


CounterResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.counter_result', {
        'backward_results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'CountObservation')]))),
        'forward_results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'CountObservation')]))),
    },
    CounterResult,
    False,
    None))



class CpuCoreConfigForEnhancedNetworkingStackSwitch(VapiStruct):
    """
    Non Uniform Memory Access (NUMA) nodes and Logical cpu cores (Lcores) per
    NUMA node configuration for Enhanced Networking Stack enabled HostSwitch.

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



    _canonical_to_pep_names = {
                            'num_lcores': 'num_lcores',
                            'numa_node_index': 'numa_node_index',
                            }

    def __init__(self,
                 num_lcores=None,
                 numa_node_index=None,
                ):
        """
        :type  num_lcores: :class:`long` or ``None``
        :param num_lcores: Number of Logical cpu cores (Lcores) to be placed on a specified
            NUMA node format: int32
        :type  numa_node_index: :class:`long` or ``None``
        :param numa_node_index: Unique index of the Non Uniform Memory Access (NUMA) node format:
            int32
        """
        self.num_lcores = num_lcores
        self.numa_node_index = numa_node_index
        VapiStruct.__init__(self)


CpuCoreConfigForEnhancedNetworkingStackSwitch._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cpu_core_config_for_enhanced_networking_stack_switch', {
        'num_lcores': type.OptionalType(type.IntegerType()),
        'numa_node_index': type.OptionalType(type.IntegerType()),
    },
    CpuCoreConfigForEnhancedNetworkingStackSwitch,
    False,
    None))



class CpuUsage(VapiStruct):
    """
    CPU usage of DPDK and non-DPDK cores

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



    _canonical_to_pep_names = {
                            'avg_cpu_core_usage_dpdk': 'avg_cpu_core_usage_dpdk',
                            'avg_cpu_core_usage_non_dpdk': 'avg_cpu_core_usage_non_dpdk',
                            'highest_cpu_core_usage_dpdk': 'highest_cpu_core_usage_dpdk',
                            'highest_cpu_core_usage_non_dpdk': 'highest_cpu_core_usage_non_dpdk',
                            }

    def __init__(self,
                 avg_cpu_core_usage_dpdk=None,
                 avg_cpu_core_usage_non_dpdk=None,
                 highest_cpu_core_usage_dpdk=None,
                 highest_cpu_core_usage_non_dpdk=None,
                ):
        """
        :type  avg_cpu_core_usage_dpdk: :class:`float` or ``None``
        :param avg_cpu_core_usage_dpdk: Indicates the average usage of all DPDK cores 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  avg_cpu_core_usage_non_dpdk: :class:`float` or ``None``
        :param avg_cpu_core_usage_non_dpdk: Indicates the average usage of all non-DPDK cores 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  highest_cpu_core_usage_dpdk: :class:`float` or ``None``
        :param highest_cpu_core_usage_dpdk: Indicates the highest CPU utilization value among DPDK cores 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  highest_cpu_core_usage_non_dpdk: :class:`float` or ``None``
        :param highest_cpu_core_usage_non_dpdk: Indicates the highest cpu utilization value among non_dpdk cores 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.
        """
        self.avg_cpu_core_usage_dpdk = avg_cpu_core_usage_dpdk
        self.avg_cpu_core_usage_non_dpdk = avg_cpu_core_usage_non_dpdk
        self.highest_cpu_core_usage_dpdk = highest_cpu_core_usage_dpdk
        self.highest_cpu_core_usage_non_dpdk = highest_cpu_core_usage_non_dpdk
        VapiStruct.__init__(self)


CpuUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cpu_usage', {
        'avg_cpu_core_usage_dpdk': type.OptionalType(type.DoubleType()),
        'avg_cpu_core_usage_non_dpdk': type.OptionalType(type.DoubleType()),
        'highest_cpu_core_usage_dpdk': type.OptionalType(type.DoubleType()),
        'highest_cpu_core_usage_non_dpdk': type.OptionalType(type.DoubleType()),
    },
    CpuUsage,
    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 CrossSiteFlowInfo(VapiStruct):
    """
    Represents details of the config flow between sites. Federation has the
    following flows - Global Manager to Local Manager (GM -> LM) - Local
    Manager to Glocal Manager (LM -> GM) - Global Manager Active to Glocal
    Manager Standby (GM -> GM) - Local Manager to Local Manager (LM -> LM)

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


    """
    STATUS_DISCONNECTED = "DISCONNECTED"
    """


    """
    STATUS_RECOVERY = "RECOVERY"
    """


    """
    STATUS_ERROR = "ERROR"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    STATUS_NOT_READY = "NOT_READY"
    """


    """



    _canonical_to_pep_names = {
                            'from_site_id': 'from_site_id',
                            'from_site_path': 'from_site_path',
                            'full_sync_info': 'full_sync_info',
                            'latency_measured_ts': 'latency_measured_ts',
                            'latency_millis': 'latency_millis',
                            'leader_node_id': 'leader_node_id',
                            'status': 'status',
                            'to_site_id': 'to_site_id',
                            'to_site_path': 'to_site_path',
                            }

    def __init__(self,
                 from_site_id=None,
                 from_site_path=None,
                 full_sync_info=None,
                 latency_measured_ts=None,
                 latency_millis=None,
                 leader_node_id=None,
                 status=None,
                 to_site_id=None,
                 to_site_path=None,
                ):
        """
        :type  from_site_id: :class:`str` or ``None``
        :param from_site_id: Site id of the source
        :type  from_site_path: :class:`str` or ``None``
        :param from_site_path: Source site policy path
        :type  full_sync_info: :class:`FullSyncInfo` or ``None``
        :param full_sync_info: 
        :type  latency_measured_ts: :class:`long` or ``None``
        :param latency_measured_ts: Timestamp of latency measurement format: int64
        :type  latency_millis: :class:`long` or ``None``
        :param latency_millis: Latency from source to destination site in milli seconds format:
            int64
        :type  leader_node_id: :class:`str` or ``None``
        :param leader_node_id: Local leader node id sharded for this remote site.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`CrossSiteFlowInfo.STATUS_GOOD`
            * :attr:`CrossSiteFlowInfo.STATUS_DISCONNECTED`
            * :attr:`CrossSiteFlowInfo.STATUS_RECOVERY`
            * :attr:`CrossSiteFlowInfo.STATUS_ERROR`
            * :attr:`CrossSiteFlowInfo.STATUS_UNKNOWN`
            * :attr:`CrossSiteFlowInfo.STATUS_NOT_READY`
            
            Overall status of the flow
        :type  to_site_id: :class:`str` or ``None``
        :param to_site_id: Site id of the destination
        :type  to_site_path: :class:`str` or ``None``
        :param to_site_path: Destination site policy path
        """
        self.from_site_id = from_site_id
        self.from_site_path = from_site_path
        self.full_sync_info = full_sync_info
        self.latency_measured_ts = latency_measured_ts
        self.latency_millis = latency_millis
        self.leader_node_id = leader_node_id
        self.status = status
        self.to_site_id = to_site_id
        self.to_site_path = to_site_path
        VapiStruct.__init__(self)


CrossSiteFlowInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cross_site_flow_info', {
        'from_site_id': type.OptionalType(type.StringType()),
        'from_site_path': type.OptionalType(type.StringType()),
        'full_sync_info': type.OptionalType(type.ReferenceType(__name__, 'FullSyncInfo')),
        'latency_measured_ts': type.OptionalType(type.IntegerType()),
        'latency_millis': type.OptionalType(type.IntegerType()),
        'leader_node_id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'to_site_id': type.OptionalType(type.StringType()),
        'to_site_path': type.OptionalType(type.StringType()),
    },
    CrossSiteFlowInfo,
    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 CustomFilterWidgetConfiguration(VapiStruct):
    """
    Represents configuration for custom filter widget. For this widget the data
    source is not applicable. It defines ui identifer for filter 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.
    """



    _canonical_to_pep_names = {
                            'ui_component_identifier': 'ui_component_identifier',
                            '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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 ui_component_identifier=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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  ui_component_identifier: :class:`str` or ``None``
        :param ui_component_identifier: User defined filter component selector to be rendered inside
            view/container.
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        self.ui_component_identifier = ui_component_identifier
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

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

CustomFilterWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.custom_filter_widget_configuration', {
        'ui_component_identifier': type.OptionalType(type.StringType()),
        '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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    CustomFilterWidgetConfiguration,
    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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_AVICONNECTIONINFO`
            
            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 DVSConfig(VapiStruct):
    """
    The DVS Configuration

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



    _canonical_to_pep_names = {
                            'host_infra_traffic_res': 'host_infra_traffic_res',
                            'lacp_group_configs': 'lacp_group_configs',
                            'lldp_send_enabled': 'lldp_send_enabled',
                            'mtu': 'mtu',
                            'name': 'name',
                            'uplink_port_names': 'uplink_port_names',
                            'uuid': 'uuid',
                            }

    def __init__(self,
                 host_infra_traffic_res=None,
                 lacp_group_configs=None,
                 lldp_send_enabled=None,
                 mtu=None,
                 name=None,
                 uplink_port_names=None,
                 uuid=None,
                ):
        """
        :type  host_infra_traffic_res: :class:`list` of :class:`ResourceAllocation` or ``None``
        :param host_infra_traffic_res: host_infra_traffic_res specifies bandwidth allocation for various
            traffic resources.
        :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  lldp_send_enabled: :class:`bool` or ``None``
        :param lldp_send_enabled: Enabled or disabled sending LLDP packets
        :type  mtu: :class:`long` or ``None``
        :param mtu: Maximum Transmission Unit used for uplinks format: int32
        :type  name: :class:`str` or ``None``
        :param name: The DVS name
        :type  uplink_port_names: :class:`list` of :class:`str` or ``None``
        :param uplink_port_names: Names of uplink ports for this DVS.
        :type  uuid: :class:`str` or ``None``
        :param uuid: The DVS uuid
        """
        self.host_infra_traffic_res = host_infra_traffic_res
        self.lacp_group_configs = lacp_group_configs
        self.lldp_send_enabled = lldp_send_enabled
        self.mtu = mtu
        self.name = name
        self.uplink_port_names = uplink_port_names
        self.uuid = uuid
        VapiStruct.__init__(self)


DVSConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.DVS_config', {
        'host_infra_traffic_res': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceAllocation'))),
        'lacp_group_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LacpGroupConfigInfo'))),
        'lldp_send_enabled': type.OptionalType(type.BooleanType()),
        'mtu': type.OptionalType(type.IntegerType()),
        'name': type.OptionalType(type.StringType()),
        'uplink_port_names': type.OptionalType(type.ListType(type.StringType())),
        'uuid': type.OptionalType(type.StringType()),
    },
    DVSConfig,
    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 DatapathCounterResult(VapiStruct):
    """
    The datapath counter result.

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



    _canonical_to_pep_names = {
                            'module_counters': 'module_counters',
                            'module_name': 'module_name',
                            }

    def __init__(self,
                 module_counters=None,
                 module_name=None,
                ):
        """
        :type  module_counters: :class:`list` of :class:`DatapathModuleCounter` or ``None``
        :param module_counters: The data of the datapath module 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  module_name: :class:`str` or ``None``
        :param module_name: The name of the datapath module (e.g., VDL2, VDR).
            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.module_counters = module_counters
        self.module_name = module_name
        VapiStruct.__init__(self)


DatapathCounterResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.datapath_counter_result', {
        'module_counters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DatapathModuleCounter'))),
        'module_name': type.OptionalType(type.StringType()),
    },
    DatapathCounterResult,
    False,
    None))



class DatapathModuleCounter(VapiStruct):
    """
    The counter of the datapath module.

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



    _canonical_to_pep_names = {
                            'counter_name': 'counter_name',
                            'counter_value': 'counter_value',
                            }

    def __init__(self,
                 counter_name=None,
                 counter_value=None,
                ):
        """
        :type  counter_name: :class:`str` or ``None``
        :param counter_name: The name of the counter.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  counter_value: :class:`long` or ``None``
        :param counter_value: The value of the counter. format: int64
            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.counter_name = counter_name
        self.counter_value = counter_value
        VapiStruct.__init__(self)


DatapathModuleCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.datapath_module_counter', {
        'counter_name': type.OptionalType(type.StringType()),
        'counter_value': type.OptionalType(type.IntegerType()),
    },
    DatapathModuleCounter,
    False,
    None))



class DatapathStatsActionArgument(VapiStruct):
    """


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


    """
    DATAPATH_STATS_TYPE_BI_DIRECTIONAL = "BI_DIRECTIONAL"
    """


    """



    _canonical_to_pep_names = {
                            'datapath_stats_type': 'datapath_stats_type',
                            'dest_lport': 'dest_lport',
                            'reverse_filter': 'reverse_filter',
                            }

    def __init__(self,
                 datapath_stats_type=None,
                 dest_lport=None,
                 reverse_filter=None,
                ):
        """
        :type  datapath_stats_type: :class:`str` or ``None``
        :param datapath_stats_type: Possible values are: 
            
            *
              :attr:`DatapathStatsActionArgument.DATAPATH_STATS_TYPE_UNI_DIRECTIONAL`
            *
              :attr:`DatapathStatsActionArgument.DATAPATH_STATS_TYPE_BI_DIRECTIONAL`
            
            Type of datapath statistics action. UNI_DIRECTIONAL - Perform the
            datapath statistics action for the traffic ingressed from the
            source logical port. BI_DIRECTIONAL - Perform the datapath
            statistics action for the traffic ingressed from the source logical
            port and the destination logical port, respectively.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dest_lport: :class:`str` or ``None``
        :param dest_lport: It is required only when the type of datapath statistics action is
            bidirectional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reverse_filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param reverse_filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        """
        self.datapath_stats_type = datapath_stats_type
        self.dest_lport = dest_lport
        self.reverse_filter = reverse_filter
        VapiStruct.__init__(self)


DatapathStatsActionArgument._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.datapath_stats_action_argument', {
        'datapath_stats_type': type.OptionalType(type.StringType()),
        'dest_lport': type.OptionalType(type.StringType()),
        'reverse_filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
    },
    DatapathStatsActionArgument,
    False,
    None))



class DatapathStatsActionConfig(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'action_argument': 'action_argument',
                            'sampling_argument': 'sampling_argument',
                            }

    def __init__(self,
                 action_argument=None,
                 sampling_argument=None,
                ):
        """
        :type  action_argument: :class:`DatapathStatsActionArgument` or ``None``
        :param action_argument: 
        :type  sampling_argument: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param sampling_argument: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`SamplingArgument`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`SamplingArgument`.
        """
        self.action_argument = action_argument
        self.sampling_argument = sampling_argument
        VapiStruct.__init__(self)


DatapathStatsActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.datapath_stats_action_config', {
        'action_argument': type.OptionalType(type.ReferenceType(__name__, 'DatapathStatsActionArgument')),
        'sampling_argument': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'SamplingArgument')])),
    },
    DatapathStatsActionConfig,
    False,
    None))



class DatapathStatsResult(VapiStruct):
    """
    The datapath statistics action result.

    .. 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',
                            'transport_node_datapath_stats': 'transport_node_datapath_stats',
                            }

    def __init__(self,
                 direction=None,
                 transport_node_datapath_stats=None,
                ):
        """
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`DatapathStatsResult.DIRECTION_FORWARD`
            * :attr:`DatapathStatsResult.DIRECTION_REVERSE`
            
            Direction of datapath statistics action result
            This 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_datapath_stats: :class:`list` of :class:`TransportNodeDatapathStats` or ``None``
        :param transport_node_datapath_stats: The datapath statistics for 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.
        """
        self.direction = direction
        self.transport_node_datapath_stats = transport_node_datapath_stats
        VapiStruct.__init__(self)


DatapathStatsResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.datapath_stats_result', {
        'direction': type.OptionalType(type.StringType()),
        'transport_node_datapath_stats': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TransportNodeDatapathStats'))),
    },
    DatapathStatsResult,
    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',
                            'keystore_info': 'keystore_info',
                            'urls': 'urls',
                            }

    def __init__(self,
                 display_name=None,
                 keystore_info=None,
                 urls=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: Name of a datasource instance.
        :type  keystore_info: :class:`KeyStoreInfo` or ``None``
        :param keystore_info: 
        :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.keystore_info = keystore_info
        self.urls = urls
        VapiStruct.__init__(self)


Datasource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.datasource', {
        'display_name': type.OptionalType(type.StringType()),
        'keystore_info': type.OptionalType(type.ReferenceType(__name__, 'KeyStoreInfo')),
        'urls': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'UrlAlias'))),
    },
    Datasource,
    False,
    None))



class DedicatedResources(VapiStruct):
    """
    To assign dedicated resources from default project to custom project for
    logging. Resources dedicated to this project for logging cannot be
    dedicated to other projects.

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



    _canonical_to_pep_names = {
                            'tier_0s': 'tier0s',
                            }

    def __init__(self,
                 tier0s=None,
                ):
        """
        :type  tier0s: :class:`list` of :class:`str` or ``None``
        :param tier0s: Logs for Tier0s mentioned will have this project's context. Tier0s
            or labels mentioned under dedicated_resources should also be part
            of tier_0s under project payload. Label should have reference of
            Tier0 path.
        """
        self.tier0s = tier0s
        VapiStruct.__init__(self)


DedicatedResources._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dedicated_resources', {
        'tier_0s': type.OptionalType(type.ListType(type.StringType())),
    },
    DedicatedResources,
    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 DependentServices(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'dependent_services': 'dependent_services',
                            }

    def __init__(self,
                 dependent_services=None,
                ):
        """
        :type  dependent_services: :class:`list` of :class:`str` or ``None``
        :param dependent_services: List of firewall dependent services.
        """
        self.dependent_services = dependent_services
        VapiStruct.__init__(self)


DependentServices._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dependent_services', {
        'dependent_services': type.OptionalType(type.ListType(type.StringType())),
    },
    DependentServices,
    False,
    None))



class DeploymentChecksAction(VapiStruct):
    """
    Pre/Post deployment checks.

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


    """
    ACTION_POST_CHECKS = "POST_CHECKS"
    """


    """
    ACTION_ABORT_CHECKS = "ABORT_CHECKS"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            }

    def __init__(self,
                 action=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`DeploymentChecksAction.ACTION_PRE_CHECKS`
            * :attr:`DeploymentChecksAction.ACTION_POST_CHECKS`
            * :attr:`DeploymentChecksAction.ACTION_ABORT_CHECKS`
            
            Run pre/post deployment checks. PRE_CHECKS - Run pre-check before
            deployment. POST_CHECKS - Run post-check after deployment.
            ABORT_CHECKS - Abort running pre/post deployement checks.
        """
        self.action = action
        VapiStruct.__init__(self)


DeploymentChecksAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_checks_action', {
        'action': type.OptionalType(type.StringType()),
    },
    DeploymentChecksAction,
    False,
    None))



class DeploymentChecksExecutionRequiredResult(VapiStruct):
    """
    Result for pre/post checks execution required or not.

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



    _canonical_to_pep_names = {
                            'is_required': 'is_required',
                            }

    def __init__(self,
                 is_required=None,
                ):
        """
        :type  is_required: :class:`bool` or ``None``
        :param is_required: Flag for pre/post checks execution required or not.
        """
        self.is_required = is_required
        VapiStruct.__init__(self)


DeploymentChecksExecutionRequiredResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_checks_execution_required_result', {
        'is_required': type.OptionalType(type.BooleanType()),
    },
    DeploymentChecksExecutionRequiredResult,
    False,
    None))



class DeploymentChecksStatus(VapiStruct):
    """
    Pre/Post deployment status.

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


    """
    STATUS_FAILED = "FAILED"
    """


    """
    STATUS_WARNING = "WARNING"
    """


    """
    STATUS_SKIPPED = "SKIPPED"
    """


    """
    STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    STATUS_STOPPING = "STOPPING"
    """


    """
    STATUS_STOPPED = "STOPPED"
    """


    """
    STATUS_NOT_STARTED = "NOT_STARTED"
    """


    """



    _canonical_to_pep_names = {
                            'description': 'description',
                            'name': 'name',
                            'reason': 'reason',
                            'status': 'status',
                            }

    def __init__(self,
                 description=None,
                 name=None,
                 reason=None,
                 status=None,
                ):
        """
        :type  description: :class:`str` or ``None``
        :param description: Show more information about pre/post check performed.
        :type  name: :class:`str` or ``None``
        :param name: Name of pre/post check
        :type  reason: :class:`str` or ``None``
        :param reason: Reason for failure of pre/post check. Otherwise empty.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`DeploymentChecksStatus.STATUS_SUCCESS`
            * :attr:`DeploymentChecksStatus.STATUS_FAILED`
            * :attr:`DeploymentChecksStatus.STATUS_WARNING`
            * :attr:`DeploymentChecksStatus.STATUS_SKIPPED`
            * :attr:`DeploymentChecksStatus.STATUS_IN_PROGRESS`
            * :attr:`DeploymentChecksStatus.STATUS_STOPPING`
            * :attr:`DeploymentChecksStatus.STATUS_STOPPED`
            * :attr:`DeploymentChecksStatus.STATUS_NOT_STARTED`
            
            Status pre/post check. SUCCESS - Successfully completed pre/post
            check. FAILED - Failed pre/post check. WARNING - Warning in
            pre/post check. SKIPPED - Pre/post check skipped. IN_PROGRESS -
            Pre/post check in progress. STOPPING - Stopping pre/post check.
            STOPPED - Pre/post check stopped. NOT_STARTED - Pre/post check not
            started
        """
        self.description = description
        self.name = name
        self.reason = reason
        self.status = status
        VapiStruct.__init__(self)


DeploymentChecksStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_checks_status', {
        'description': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'reason': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    DeploymentChecksStatus,
    False,
    None))



class DeploymentChecksStatusResult(VapiStruct):
    """
    List of pre/post checks status.

    .. 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:`DeploymentChecksStatus` or ``None``
        :param results: Array of pre/post deployment checks.
        """
        self.results = results
        VapiStruct.__init__(self)


DeploymentChecksStatusResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_checks_status_result', {
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DeploymentChecksStatus'))),
    },
    DeploymentChecksStatusResult,
    False,
    None))



class DeploymentProgressStatus(VapiStruct):
    """
    Progress status of deployment.

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


    """
    OVERALL_STATUS_UNDEPLOYMENT_IN_PROGRESS = "UNDEPLOYMENT_IN_PROGRESS"
    """


    """
    OVERALL_STATUS_UPGRADE_IN_PROGRESS = "UPGRADE_IN_PROGRESS"
    """


    """
    OVERALL_STATUS_UPDATE_IN_PROGRESS = "UPDATE_IN_PROGRESS"
    """


    """
    OVERALL_STATUS_DEPLOYMENT_QUEUED = "DEPLOYMENT_QUEUED"
    """


    """
    OVERALL_STATUS_UNDEPLOYMENT_QUEUED = "UNDEPLOYMENT_QUEUED"
    """


    """
    OVERALL_STATUS_UPDATE_QUEUED = "UPDATE_QUEUED"
    """


    """
    OVERALL_STATUS_DEPLOYMENT_SUCCESSFUL = "DEPLOYMENT_SUCCESSFUL"
    """


    """
    OVERALL_STATUS_UNDEPLOYMENT_SUCCESSFUL = "UNDEPLOYMENT_SUCCESSFUL"
    """


    """
    OVERALL_STATUS_UPGRADE_SUCCESSFUL = "UPGRADE_SUCCESSFUL"
    """


    """
    OVERALL_STATUS_UPDATE_SUCCESSFUL = "UPDATE_SUCCESSFUL"
    """


    """
    OVERALL_STATUS_DEPLOYMENT_FAILED = "DEPLOYMENT_FAILED"
    """


    """
    OVERALL_STATUS_UNDEPLOYMENT_FAILED = "UNDEPLOYMENT_FAILED"
    """


    """
    OVERALL_STATUS_UPGRADE_FAILED = "UPGRADE_FAILED"
    """


    """
    OVERALL_STATUS_UPDATE_FAILED = "UPDATE_FAILED"
    """


    """
    OVERALL_STATUS_NOT_DEPLOYED = "NOT_DEPLOYED"
    """


    """



    _canonical_to_pep_names = {
                            'error_message': 'error_message',
                            'overall_status': 'overall_status',
                            'percentage': 'percentage',
                            'progress_message': 'progress_message',
                            }

    def __init__(self,
                 error_message=None,
                 overall_status=None,
                 percentage=None,
                 progress_message=None,
                ):
        """
        :type  error_message: :class:`list` of :class:`str` or ``None``
        :param error_message: Errors during deployment.
        :type  overall_status: :class:`str` or ``None``
        :param overall_status: Possible values are: 
            
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_DEPLOYMENT_IN_PROGRESS`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_UNDEPLOYMENT_IN_PROGRESS`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_UPGRADE_IN_PROGRESS`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_UPDATE_IN_PROGRESS`
            * :attr:`DeploymentProgressStatus.OVERALL_STATUS_DEPLOYMENT_QUEUED`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_UNDEPLOYMENT_QUEUED`
            * :attr:`DeploymentProgressStatus.OVERALL_STATUS_UPDATE_QUEUED`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_DEPLOYMENT_SUCCESSFUL`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_UNDEPLOYMENT_SUCCESSFUL`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_UPGRADE_SUCCESSFUL`
            * :attr:`DeploymentProgressStatus.OVERALL_STATUS_UPDATE_SUCCESSFUL`
            * :attr:`DeploymentProgressStatus.OVERALL_STATUS_DEPLOYMENT_FAILED`
            *
              :attr:`DeploymentProgressStatus.OVERALL_STATUS_UNDEPLOYMENT_FAILED`
            * :attr:`DeploymentProgressStatus.OVERALL_STATUS_UPGRADE_FAILED`
            * :attr:`DeploymentProgressStatus.OVERALL_STATUS_UPDATE_FAILED`
            * :attr:`DeploymentProgressStatus.OVERALL_STATUS_NOT_DEPLOYED`
            
            Progress status of deployment. DEPLOYMENT_IN_PROGRESS - Deployment
            in progress. UNDEPLOYMENT_IN_PROGRESS - Undeployment in progress.
            UPGRADE_IN_PROGRESS - Upgrade in progress. UPDATE_IN_PROGRESS -
            Update in progress. DEPLOYMENT_QUEUED - Deployment queued.
            UNDEPLOYMENT_QUEUED - Undeployment queued. UPDATE_QUEUED - Update
            queued. DEPLOYMENT_SUCCESSFUL - Deployment successful.
            UNDEPLOYMENT_SUCCESSFUL - Undeployment successful.
            UPGRADE_SUCCESSFUL - Upgrade successful. UPDATE_SUCCESSFUL - Update
            successful. DEPLOYMENT_FAILED - Deployment failed.
            UNDEPLOYMENT_FAILED - Undeployment failed. UPGRADE_FAILED - Upgrade
            failed. UPDATE_FAILED - Update failed. NOT_DEPLOYED - Deployment
            pending.
        :type  percentage: :class:`long` or ``None``
        :param percentage: Percentage completed for deployment. format: int64
        :type  progress_message: :class:`str` or ``None``
        :param progress_message: More information about progress.
        """
        self.error_message = error_message
        self.overall_status = overall_status
        self.percentage = percentage
        self.progress_message = progress_message
        VapiStruct.__init__(self)


DeploymentProgressStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_progress_status', {
        'error_message': type.OptionalType(type.ListType(type.StringType())),
        'overall_status': type.OptionalType(type.StringType()),
        'percentage': type.OptionalType(type.IntegerType()),
        'progress_message': type.OptionalType(type.StringType()),
    },
    DeploymentProgressStatus,
    False,
    None))



class DeploymentRegistry(VapiStruct):
    """
    Template for storing docker registry and helm 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'docker_registry': 'docker_registry',
                            'helm_repo': 'helm_repo',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 docker_registry=None,
                 helm_repo=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  docker_registry: :class:`str` or ``None``
        :param docker_registry: Docker registry url to access docker images.
        :type  helm_repo: :class:`str` or ``None``
        :param helm_repo: Helm repo url to access helm charts.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.docker_registry = docker_registry
        self.helm_repo = helm_repo
        VapiStruct.__init__(self)


DeploymentRegistry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_registry', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'docker_registry': type.OptionalType(type.StringType()),
        'helm_repo': type.OptionalType(type.StringType()),
    },
    DeploymentRegistry,
    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 DeploymentVersionSpec(VapiStruct):
    """
    Deployment version with chart name

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



    _canonical_to_pep_names = {
                            'chart_name': 'chart_name',
                            'versions': 'versions',
                            }

    def __init__(self,
                 chart_name=None,
                 versions=None,
                ):
        """
        :type  chart_name: :class:`str` or ``None``
        :param chart_name: Deployment chart name.
        :type  versions: :class:`str` or ``None``
        :param versions: List of deployment versions.
        """
        self.chart_name = chart_name
        self.versions = versions
        VapiStruct.__init__(self)


DeploymentVersionSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_version_spec', {
        'chart_name': type.OptionalType(type.StringType()),
        'versions': type.OptionalType(type.StringType()),
    },
    DeploymentVersionSpec,
    False,
    None))



class DeploymentVersions(VapiStruct):
    """
    Different NSX Application Platform deployment versions.

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



    _canonical_to_pep_names = {
                            'versions': 'versions',
                            }

    def __init__(self,
                 versions=None,
                ):
        """
        :type  versions: :class:`list` of :class:`DeploymentVersionSpec` or ``None``
        :param versions: List of deployment versions.
        """
        self.versions = versions
        VapiStruct.__init__(self)


DeploymentVersions._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_versions', {
        'versions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DeploymentVersionSpec'))),
    },
    DeploymentVersions,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 DfwDropCounters(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'rx_dropped': 'rx_dropped',
                            'tx_dropped': 'tx_dropped',
                            }

    def __init__(self,
                 rx_dropped=None,
                 tx_dropped=None,
                ):
        """
        :type  rx_dropped: :class:`long` or ``None``
        :param rx_dropped: The number of received packets dropped by distributed firewall
            rules due to rule actions. format: int64
        :type  tx_dropped: :class:`long` or ``None``
        :param tx_dropped: The number of sent packets dropped by distributed firewall rules
            due to rule actions. format: int64
        """
        self.rx_dropped = rx_dropped
        self.tx_dropped = tx_dropped
        VapiStruct.__init__(self)


DfwDropCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dfw_drop_counters', {
        'rx_dropped': type.OptionalType(type.IntegerType()),
        'tx_dropped': type.OptionalType(type.IntegerType()),
    },
    DfwDropCounters,
    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',
                            'idfw_event_log_scraper_enabled': 'idfw_event_log_scraper_enabled',
                            'idfw_loginsight_enabled': 'idfw_loginsight_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'global_addrset_mode_enabled': 'global_addrset_mode_enabled',
                            }

    def __init__(self,
                 idfw_enabled=None,
                 idfw_event_log_scraper_enabled=None,
                 idfw_loginsight_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 disable_auto_drafts=None,
                 enable_firewall=None,
                 global_addrset_mode_enabled=None,
                ):
        """
        :type  idfw_enabled: :class:`bool` or ``None``
        :param idfw_enabled: If set to true, identity firewall is enabled.
        :type  idfw_event_log_scraper_enabled: :class:`bool` or ``None``
        :param idfw_event_log_scraper_enabled: Enables event log scraping for Identity firewall.
        :type  idfw_loginsight_enabled: :class:`bool` or ``None``
        :param idfw_loginsight_enabled: If set to true, collection of login/logout events from Loginsight
            server 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate 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.
        :type  global_addrset_mode_enabled: :class:`bool` or ``None``
        :param global_addrset_mode_enabled: When this flag is set to true, global address set is enabled in
            Distributed Firewall.
        """
        self.idfw_enabled = idfw_enabled
        self.idfw_event_log_scraper_enabled = idfw_event_log_scraper_enabled
        self.idfw_loginsight_enabled = idfw_loginsight_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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
        self.global_addrset_mode_enabled = global_addrset_mode_enabled
        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()),
        'idfw_event_log_scraper_enabled': type.OptionalType(type.BooleanType()),
        'idfw_loginsight_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'global_addrset_mode_enabled': type.OptionalType(type.BooleanType()),
    },
    DfwFirewallConfiguration,
    False,
    None))



class DhcpConfig(VapiStruct):
    """
    DHCP config. This dhcp configuration can be overriden per subnet.

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



    _canonical_to_pep_names = {
                            'dhcp_relay_config_path': 'dhcp_relay_config_path',
                            'dns_client_config': 'dns_client_config',
                            'enable_dhcp': 'enable_dhcp',
                            }

    def __init__(self,
                 dhcp_relay_config_path=None,
                 dns_client_config=None,
                 enable_dhcp=None,
                ):
        """
        :type  dhcp_relay_config_path: :class:`str` or ``None``
        :param dhcp_relay_config_path: Policy path of DHCP-relay-config. If configured then all the
            subnets will be configured with the DHCP relay server. If not
            specified, then the local DHCP server will be configured for all
            connected subnets.
        :type  dns_client_config: :class:`DnsClientConfig` or ``None``
        :param dns_client_config: 
        :type  enable_dhcp: :class:`bool` or ``None``
        :param enable_dhcp: If activated, the DHCP server will be configured based on IP
            address type. If deactivated then neither DHCP server nor relay
            shall be configured.
        """
        self.dhcp_relay_config_path = dhcp_relay_config_path
        self.dns_client_config = dns_client_config
        self.enable_dhcp = enable_dhcp
        VapiStruct.__init__(self)


DhcpConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_config', {
        'dhcp_relay_config_path': type.OptionalType(type.StringType()),
        'dns_client_config': type.OptionalType(type.ReferenceType(__name__, 'DnsClientConfig')),
        'enable_dhcp': type.OptionalType(type.BooleanType()),
    },
    DhcpConfig,
    False,
    None))



class DhcpDeleteLeaseRequestParameters(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'ip': 'ip',
                            'mac': 'mac',
                            }

    def __init__(self,
                 ip=None,
                 mac=None,
                ):
        """
        :type  ip: :class:`str` or ``None``
        :param ip: IPv4 or IPv6 address format: ip
        :type  mac: :class:`str` or ``None``
        :param mac: A MAC address. Must be 6 pairs of hexadecimal digits, upper or
            lower case, separated by colons or dashes. Examples:
            01:23:45:67:89:ab, 01-23-45-67-89-AB. format: mac-address
        """
        self.ip = ip
        self.mac = mac
        VapiStruct.__init__(self)


DhcpDeleteLeaseRequestParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_delete_lease_request_parameters', {
        'ip': type.OptionalType(type.StringType()),
        'mac': type.OptionalType(type.StringType()),
    },
    DhcpDeleteLeaseRequestParameters,
    False,
    None))



class DhcpDeleteLeases(VapiStruct):
    """
    List of DHCP leases to be deleted

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



    _canonical_to_pep_names = {
                            'leases': 'leases',
                            }

    def __init__(self,
                 leases=None,
                ):
        """
        :type  leases: :class:`list` of :class:`DhcpDeleteLeaseRequestParameters` or ``None``
        :param leases: List of DHCP leases
        """
        self.leases = leases
        VapiStruct.__init__(self)


DhcpDeleteLeases._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_delete_leases', {
        'leases': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DhcpDeleteLeaseRequestParameters'))),
    },
    DhcpDeleteLeases,
    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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'dhcp_server_id': 'dhcp_server_id',
                            'leases': 'leases',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 dhcp_server_id=None,
                 leases=None,
                 timestamp=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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  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.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.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', {
        '_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()),
        '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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'dhcp_server_id': 'dhcp_server_id',
                            'leases': 'leases',
                            'timestamp': 'timestamp',
                            'connectivity_path': 'connectivity_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 dhcp_server_id=None,
                 leases=None,
                 timestamp=None,
                 connectivity_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_: 
        :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  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.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.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', {
        '_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()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'edge_cluster_path': 'edge_cluster_path',
                            'enable_standby_relocation': 'enable_standby_relocation',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 edge_cluster_path=None,
                 enable_standby_relocation=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: The reference to the edge cluster using the policy path of the edge
            cluster or label of type PolicyEdgeCluster. 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  enable_standby_relocation: :class:`bool` or ``None``
        :param enable_standby_relocation: If no \"preferred-edge-paths\" were defined, and the
            \"enable-standby-relocation\"=true, once a new edge-node was added
            to the edge-cluster, the stand-by node of the DHCP could possibly
            be moved to another edge-node. But there is no guarantee that the
            stand-by will be moved. Please note, if the dhcp-server-config was
            applied to a gateway, and this gateway has defined its own
            edge-cluster and preferred edge-nodes, then the edge-cluster and
            nodes defined in dhcp-server-config will be ignored.
        :type  lease_time: :class:`long` or ``None``
        :param lease_time: IP address lease time in seconds. format: int64

            .. deprecated:: unknown
        :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

            .. deprecated:: unknown
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.enable_standby_relocation = enable_standby_relocation
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'enable_standby_relocation': type.OptionalType(type.BooleanType()),
        '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_: 
        :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"
    """


    """
    STATE_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """



    _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`
            * :attr:`DhcpServerState.STATE_REPLACE_FAILED`
            *
              :attr:`DhcpServerState.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`DhcpServerState.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            * :attr:`DhcpServerState.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            * :attr:`DhcpServerState.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`DhcpServerState.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            * :attr:`DhcpServerState.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`DhcpServerState.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`DhcpServerState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`DhcpServerState.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`DhcpServerState.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`DhcpServerState.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`DhcpServerState.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`DhcpServerState.STATE_COMPUTE_MANAGER_NOT_FOUND`
            * :attr:`DhcpServerState.STATE_DELETE_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_ADVANCED_CONFIG_EDIT_FAILED`
            * :attr:`DhcpServerState.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            * :attr:`DhcpServerState.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`DhcpServerState.STATE_MAINTENANCE_MODE_ENABLED`
            * :attr:`DhcpServerState.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            * :attr:`DhcpServerState.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            * :attr:`DhcpServerState.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            * :attr:`DhcpServerState.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`DhcpServerState.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            * :attr:`DhcpServerState.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            * :attr:`DhcpServerState.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            * :attr:`DhcpServerState.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            * :attr:`DhcpServerState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`DhcpServerState.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`DhcpServerState.STATE_REDEPLOY_ACTIVITY_FAILED`
            * :attr:`DhcpServerState.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            * :attr:`DhcpServerState.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`DhcpServerState.STATE_REPLACE_ACTIVITY_FAILED`
            * :attr:`DhcpServerState.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_REPLACE_ACTIVITY_SCHEDULED`
            * :attr:`DhcpServerState.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`DhcpServerState.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`DhcpServerState.STATE_RETRYING_REPLACE`
            *
              :attr:`DhcpServerState.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`DhcpServerState.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`DhcpServerState.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            * :attr:`DhcpServerState.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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`
            
            Resource type of the DhcpStaticBindingConfig
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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"
    """


    """
    STATE_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """



    _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`
            * :attr:`DhcpStaticBindingState.STATE_REPLACE_FAILED`
            *
              :attr:`DhcpStaticBindingState.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`DhcpStaticBindingState.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            * :attr:`DhcpStaticBindingState.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`DhcpStaticBindingState.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            *
              :attr:`DhcpStaticBindingState.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`DhcpStaticBindingState.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`DhcpStaticBindingState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`DhcpStaticBindingState.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`DhcpStaticBindingState.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`DhcpStaticBindingState.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`DhcpStaticBindingState.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`DhcpStaticBindingState.STATE_COMPUTE_MANAGER_NOT_FOUND`
            * :attr:`DhcpStaticBindingState.STATE_DELETE_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`DhcpStaticBindingState.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`DhcpStaticBindingState.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_MAINTENANCE_MODE_ENABLED`
            *
              :attr:`DhcpStaticBindingState.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`DhcpStaticBindingState.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            * :attr:`DhcpStaticBindingState.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            *
              :attr:`DhcpStaticBindingState.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`DhcpStaticBindingState.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            *
              :attr:`DhcpStaticBindingState.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            *
              :attr:`DhcpStaticBindingState.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            * :attr:`DhcpStaticBindingState.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`DhcpStaticBindingState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`DhcpStaticBindingState.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`DhcpStaticBindingState.STATE_REDEPLOY_ACTIVITY_FAILED`
            *
              :attr:`DhcpStaticBindingState.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            * :attr:`DhcpStaticBindingState.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`DhcpStaticBindingState.STATE_REPLACE_ACTIVITY_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_REPLACE_ACTIVITY_SCHEDULED`
            * :attr:`DhcpStaticBindingState.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`DhcpStaticBindingState.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`DhcpStaticBindingState.STATE_RETRYING_REPLACE`
            *
              :attr:`DhcpStaticBindingState.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`DhcpStaticBindingState.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`DhcpStaticBindingState.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`DhcpStaticBindingState.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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: 
        :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) 117 Name Service Search 119 Domain
            Search 150 TFTP server address (used by PXE) 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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`
            
            Resource type of the DhcpStaticBindingConfig
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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`
            
            Resource type of the DhcpStaticBindingConfig
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 DirectoryAdDomain(VapiStruct):
    """
    Active Directory Domain

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DirectoryAdDomain"
    """
    Identifier denoting this class, when it is used 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 = {
                            'base_distinguished_name': 'base_distinguished_name',
                            'netbios_name': 'netbios_name',
                            'selective_sync_settings': 'selective_sync_settings',
                            'sync_settings': 'sync_settings',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'event_log_servers': 'event_log_servers',
                            'ldap_servers': 'ldap_servers',
                            'name': 'name',
                            }

    def __init__(self,
                 base_distinguished_name=None,
                 netbios_name=None,
                 selective_sync_settings=None,
                 sync_settings=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='DirectoryAdDomain',
                 tags=None,
                 event_log_servers=None,
                 ldap_servers=None,
                 name=None,
                ):
        """
        :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  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:`SelectiveSyncSettings` or ``None``
        :param selective_sync_settings: 
        :type  sync_settings: :class:`DirectoryDomainSyncSettings` or ``None``
        :param sync_settings: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`DirectoryDomain.RESOURCE_TYPE_DIRECTORYADDOMAIN`
            
            Domain resource type comes from multiple sub-classes extending this
            base class. For example, DirectoryAdDomain is one accepted
            resource_type. If there are more sub-classes defined, they will
            also be accepted resource_type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  event_log_servers: :class:`list` of :class:`DirectoryEventLogServer` or ``None``
        :param event_log_servers: Directory domain Event Log server's information including host,
            name, protocol and so on.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ldap_servers: :class:`list` of :class:`DirectoryLdapServer` 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.
        """
        self.base_distinguished_name = base_distinguished_name
        self.netbios_name = netbios_name
        self.selective_sync_settings = selective_sync_settings
        self.sync_settings = sync_settings
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.event_log_servers = event_log_servers
        self.ldap_servers = ldap_servers
        self.name = name
        VapiStruct.__init__(self)

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

DirectoryAdDomain._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_ad_domain', {
        'base_distinguished_name': type.OptionalType(type.StringType()),
        'netbios_name': type.OptionalType(type.StringType()),
        'selective_sync_settings': type.OptionalType(type.ReferenceType(__name__, 'SelectiveSyncSettings')),
        'sync_settings': type.OptionalType(type.ReferenceType(__name__, 'DirectoryDomainSyncSettings')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'event_log_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DirectoryEventLogServer'))),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DirectoryLdapServer'))),
        'name': type.OptionalType(type.StringType()),
    },
    DirectoryAdDomain,
    False,
    None))



class DirectoryAdGroup(VapiStruct):
    """


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



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

    def __init__(self,
                 object_guid=None,
                 secure_id=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,
                 distinguished_name=None,
                 domain_id=None,
                 domain_name=None,
                 domain_sync_node_id=None,
                ):
        """
        :type  object_guid: :class:`str` or ``None``
        :param object_guid: GUID is a 128-bit value that is unique not only in the enterprise
            but also across the world. GUIDs are assigned to every object
            created by Active Directory, not just User and Group objects.
        :type  secure_id: :class:`str` or ``None``
        :param secure_id: 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.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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: Directory group resource type comes from multiple sub-classes
            extending this base class. For example, DirectoryAdGroup is one
            accepted resource_type. If there are more sub-classes defined, they
            will also be accepted resource_type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  distinguished_name: :class:`str` or ``None``
        :param distinguished_name: Directory group distinguished name
        :type  domain_id: :class:`str` or ``None``
        :param domain_id: Domain ID this directory group belongs to.
        :type  domain_name: :class:`str` or ``None``
        :param domain_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  domain_sync_node_id: :class:`str` or ``None``
        :param domain_sync_node_id: Domain sync node under which this directory group is located. We
            currently sync only from Root node and hence this attribute doesn't
            have a specific value set.
        """
        self.object_guid = object_guid
        self.secure_id = secure_id
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.distinguished_name = distinguished_name
        self.domain_id = domain_id
        self.domain_name = domain_name
        self.domain_sync_node_id = domain_sync_node_id
        VapiStruct.__init__(self)

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

DirectoryAdGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_ad_group', {
        'object_guid': type.OptionalType(type.StringType()),
        'secure_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')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'distinguished_name': type.OptionalType(type.StringType()),
        'domain_id': type.OptionalType(type.StringType()),
        'domain_name': type.OptionalType(type.StringType()),
        'domain_sync_node_id': type.OptionalType(type.StringType()),
    },
    DirectoryAdGroup,
    False,
    None))



class DirectoryDomain(VapiStruct):
    """
    Directory Domain

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DirectoryDomain"
    """
    Identifier denoting this class, when it is used 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_DIRECTORYADDOMAIN = "DirectoryAdDomain"
    """


    """



    _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',
                            'event_log_servers': 'event_log_servers',
                            'ldap_servers': 'ldap_servers',
                            'name': '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='DirectoryDomain',
                 tags=None,
                 event_log_servers=None,
                 ldap_servers=None,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`DirectoryDomain.RESOURCE_TYPE_DIRECTORYADDOMAIN`
            
            Domain resource type comes from multiple sub-classes extending this
            base class. For example, DirectoryAdDomain is one accepted
            resource_type. If there are more sub-classes defined, they will
            also be accepted resource_type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  event_log_servers: :class:`list` of :class:`DirectoryEventLogServer` or ``None``
        :param event_log_servers: Directory domain Event Log server's information including host,
            name, protocol and so on.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ldap_servers: :class:`list` of :class:`DirectoryLdapServer` 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.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.event_log_servers = event_log_servers
        self.ldap_servers = ldap_servers
        self.name = name
        VapiStruct.__init__(self)

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

DirectoryDomain._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_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'))),
        'event_log_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DirectoryEventLogServer'))),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DirectoryLdapServer'))),
        'name': type.OptionalType(type.StringType()),
    },
    DirectoryDomain,
    False,
    None))



class DirectoryDomainListResults(VapiStruct):
    """
    List of Directory Domain

    .. 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_: 
        :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 Directory Domains
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`DirectoryDomain`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`DirectoryDomain`.
        """
        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)


DirectoryDomainListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_domain_list_results', {
        '_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__, 'DirectoryDomain')]))),
    },
    DirectoryDomainListResults,
    False,
    None))



class DirectoryDomainSize(VapiStruct):
    """
    Size of Directory Domain

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



    _canonical_to_pep_names = {
                            'group_count': 'group_count',
                            'group_member_count': 'group_member_count',
                            'user_count': 'user_count',
                            }

    def __init__(self,
                 group_count=None,
                 group_member_count=None,
                 user_count=None,
                ):
        """
        :type  group_count: :class:`long` or ``None``
        :param group_count: Number of groups 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  group_member_count: :class:`long` or ``None``
        :param group_member_count: Number of group members 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  user_count: :class:`long` or ``None``
        :param user_count: Number of users 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.group_count = group_count
        self.group_member_count = group_member_count
        self.user_count = user_count
        VapiStruct.__init__(self)


DirectoryDomainSize._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_domain_size', {
        'group_count': type.OptionalType(type.IntegerType()),
        'group_member_count': type.OptionalType(type.IntegerType()),
        'user_count': type.OptionalType(type.IntegerType()),
    },
    DirectoryDomainSize,
    False,
    None))



class DirectoryDomainSyncSettings(VapiStruct):
    """
    Domain 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)


DirectoryDomainSyncSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_domain_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()),
    },
    DirectoryDomainSyncSettings,
    False,
    None))



class DirectoryDomainSyncStats(VapiStruct):
    """
    Directory domain synchronization statistics

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


    """
    CURRENT_STATE_FULL_SYNC = "FULL_SYNC"
    """


    """
    CURRENT_STATE_DELTA_SYNC = "DELTA_SYNC"
    """


    """
    CURRENT_STATE_SELECTIVE_FULL_SYNC = "SELECTIVE_FULL_SYNC"
    """


    """
    CURRENT_STATE_SELECTIVE_DELTA_SYNC = "SELECTIVE_DELTA_SYNC"
    """


    """
    PREV_SYNC_STATUS_SUCCESS = "SUCCESS"
    """


    """
    PREV_SYNC_STATUS_FAILURE = "FAILURE"
    """


    """
    PREV_SYNC_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    PREV_SYNC_TYPE_IDLE = "IDLE"
    """


    """
    PREV_SYNC_TYPE_FULL_SYNC = "FULL_SYNC"
    """


    """
    PREV_SYNC_TYPE_DELTA_SYNC = "DELTA_SYNC"
    """


    """
    PREV_SYNC_TYPE_SELECTIVE_FULL_SYNC = "SELECTIVE_FULL_SYNC"
    """


    """
    PREV_SYNC_TYPE_SELECTIVE_DELTA_SYNC = "SELECTIVE_DELTA_SYNC"
    """


    """



    _canonical_to_pep_names = {
                            'avg_delta_sync_time': 'avg_delta_sync_time',
                            'avg_full_sync_time': 'avg_full_sync_time',
                            'current_state': 'current_state',
                            'current_state_begin_time': 'current_state_begin_time',
                            'num_delta_sync': 'num_delta_sync',
                            'num_full_sync': 'num_full_sync',
                            'prev_sync_end_time': 'prev_sync_end_time',
                            'prev_sync_error': 'prev_sync_error',
                            'prev_sync_status': 'prev_sync_status',
                            'prev_sync_type': 'prev_sync_type',
                            }

    def __init__(self,
                 avg_delta_sync_time=None,
                 avg_full_sync_time=None,
                 current_state=None,
                 current_state_begin_time=None,
                 num_delta_sync=None,
                 num_full_sync=None,
                 prev_sync_end_time=None,
                 prev_sync_error=None,
                 prev_sync_status=None,
                 prev_sync_type=None,
                ):
        """
        :type  avg_delta_sync_time: :class:`long` or ``None``
        :param avg_delta_sync_time: All the historical delta sync are counted in calculating the
            average delta sync time in 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  avg_full_sync_time: :class:`long` or ``None``
        :param avg_full_sync_time: All the historical full sync are counted in calculating the average
            full sync time in 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  current_state: :class:`str` or ``None``
        :param current_state: Possible values are: 
            
            * :attr:`DirectoryDomainSyncStats.CURRENT_STATE_IDLE`
            * :attr:`DirectoryDomainSyncStats.CURRENT_STATE_FULL_SYNC`
            * :attr:`DirectoryDomainSyncStats.CURRENT_STATE_DELTA_SYNC`
            *
              :attr:`DirectoryDomainSyncStats.CURRENT_STATE_SELECTIVE_FULL_SYNC`
            *
              :attr:`DirectoryDomainSyncStats.CURRENT_STATE_SELECTIVE_DELTA_SYNC`
            
            Current running state of the directory domain in synchronization
            life cycle. It could be one of the following five states.
            SELECTIVE_FULL_SYNC and SELECTIVE_DELTA_SYNC are sync states for
            selective 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  current_state_begin_time: :class:`long` or ``None``
        :param current_state_begin_time: Since what time the current state has begun. The time is expressed
            in millisecond epoch time. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  num_delta_sync: :class:`long` or ``None``
        :param num_delta_sync: number of successful historical delta sync initiated either by
            system or by API request. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  num_full_sync: :class:`long` or ``None``
        :param num_full_sync: number of successful historical full sync initiated either by
            system or by API request. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  prev_sync_end_time: :class:`long` or ``None``
        :param prev_sync_end_time: Directory domain previous sync ending time expressed in millisecond
            epoch time. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  prev_sync_error: :class:`str` or ``None``
        :param prev_sync_error: Directory domain previous sync status error if last status was
            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  prev_sync_status: :class:`str` or ``None``
        :param prev_sync_status: Possible values are: 
            
            * :attr:`DirectoryDomainSyncStats.PREV_SYNC_STATUS_SUCCESS`
            * :attr:`DirectoryDomainSyncStats.PREV_SYNC_STATUS_FAILURE`
            * :attr:`DirectoryDomainSyncStats.PREV_SYNC_STATUS_UNKNOWN`
            
            Directory domain previous sync status. It could be one of the
            following two states.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  prev_sync_type: :class:`str` or ``None``
        :param prev_sync_type: Possible values are: 
            
            * :attr:`DirectoryDomainSyncStats.PREV_SYNC_TYPE_IDLE`
            * :attr:`DirectoryDomainSyncStats.PREV_SYNC_TYPE_FULL_SYNC`
            * :attr:`DirectoryDomainSyncStats.PREV_SYNC_TYPE_DELTA_SYNC`
            *
              :attr:`DirectoryDomainSyncStats.PREV_SYNC_TYPE_SELECTIVE_FULL_SYNC`
            *
              :attr:`DirectoryDomainSyncStats.PREV_SYNC_TYPE_SELECTIVE_DELTA_SYNC`
            
            Directory domain previous sync type. It could be one of the
            following five states. Right after the directory domain is
            configured, this field is set to IDLE.
            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.avg_delta_sync_time = avg_delta_sync_time
        self.avg_full_sync_time = avg_full_sync_time
        self.current_state = current_state
        self.current_state_begin_time = current_state_begin_time
        self.num_delta_sync = num_delta_sync
        self.num_full_sync = num_full_sync
        self.prev_sync_end_time = prev_sync_end_time
        self.prev_sync_error = prev_sync_error
        self.prev_sync_status = prev_sync_status
        self.prev_sync_type = prev_sync_type
        VapiStruct.__init__(self)


DirectoryDomainSyncStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_domain_sync_stats', {
        'avg_delta_sync_time': type.OptionalType(type.IntegerType()),
        'avg_full_sync_time': type.OptionalType(type.IntegerType()),
        'current_state': type.OptionalType(type.StringType()),
        'current_state_begin_time': type.OptionalType(type.IntegerType()),
        'num_delta_sync': type.OptionalType(type.IntegerType()),
        'num_full_sync': type.OptionalType(type.IntegerType()),
        'prev_sync_end_time': type.OptionalType(type.IntegerType()),
        'prev_sync_error': type.OptionalType(type.StringType()),
        'prev_sync_status': type.OptionalType(type.StringType()),
        'prev_sync_type': type.OptionalType(type.StringType()),
    },
    DirectoryDomainSyncStats,
    False,
    None))



class DirectoryEventLogServer(VapiStruct):
    """
    Event log server of directory 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',
                            'domain_name': 'domain_name',
                            'host': 'host',
                            'password': 'password',
                            'status': 'status',
                            '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,
                 domain_name=None,
                 host=None,
                 password=None,
                 status=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  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 contraint for domain name among different domains.
        :type  host: :class:`str` or ``None``
        :param host: Directory Event Log server DNS host name or ip address which is
            reachable by NSX manager to be connected and do event fetching.
            format: hostname-or-ip
        :type  password: :class:`str` or ``None``
        :param password: Directory event log server connection password.
        :type  status: :class:`DirectoryEventLogServerStatus` or ``None``
        :param status: 
        :type  username: :class:`str` or ``None``
        :param username: Directory event log 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.domain_name = domain_name
        self.host = host
        self.password = password
        self.status = status
        self.username = username
        VapiStruct.__init__(self)


DirectoryEventLogServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_event_log_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'))),
        'domain_name': type.OptionalType(type.StringType()),
        'host': type.OptionalType(type.StringType()),
        'password': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.ReferenceType(__name__, 'DirectoryEventLogServerStatus')),
        'username': type.OptionalType(type.StringType()),
    },
    DirectoryEventLogServer,
    False,
    None))



class DirectoryEventLogServerStatus(VapiStruct):
    """
    Event log server connection status

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


    """
    STATUS_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            'error_message': 'error_message',
                            'last_event_record_id': 'last_event_record_id',
                            'last_event_time_created': 'last_event_time_created',
                            'last_polling_time': 'last_polling_time',
                            'status': 'status',
                            }

    def __init__(self,
                 error_message=None,
                 last_event_record_id=None,
                 last_event_time_created=None,
                 last_polling_time=None,
                 status=None,
                ):
        """
        :type  error_message: :class:`str` or ``None``
        :param error_message: Additional optional detail error message
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_event_record_id: :class:`long` or ``None``
        :param last_event_record_id: Last event record ID is an opaque integer value that shows the last
            successfully received event from event log server. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_event_time_created: :class:`long` or ``None``
        :param last_event_time_created: Time of last successfully received and record event from event log
            server. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_polling_time: :class:`long` or ``None``
        :param last_polling_time: Last polling time format: int64
            This 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:`DirectoryEventLogServerStatus.STATUS_OK`
            * :attr:`DirectoryEventLogServerStatus.STATUS_ERROR`
            
            Connection status: OK: All OK ERROR: Generic 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.
        """
        self.error_message = error_message
        self.last_event_record_id = last_event_record_id
        self.last_event_time_created = last_event_time_created
        self.last_polling_time = last_polling_time
        self.status = status
        VapiStruct.__init__(self)


DirectoryEventLogServerStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_event_log_server_status', {
        'error_message': type.OptionalType(type.StringType()),
        'last_event_record_id': type.OptionalType(type.IntegerType()),
        'last_event_time_created': type.OptionalType(type.IntegerType()),
        'last_polling_time': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
    },
    DirectoryEventLogServerStatus,
    False,
    None))



class DirectoryGroup(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DirectoryGroup"
    """
    Identifier denoting this class, when it is used 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',
                            'distinguished_name': 'distinguished_name',
                            'domain_id': 'domain_id',
                            'domain_name': 'domain_name',
                            'domain_sync_node_id': 'domain_sync_node_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='DirectoryGroup',
                 tags=None,
                 distinguished_name=None,
                 domain_id=None,
                 domain_name=None,
                 domain_sync_node_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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: Directory group resource type comes from multiple sub-classes
            extending this base class. For example, DirectoryAdGroup is one
            accepted resource_type. If there are more sub-classes defined, they
            will also be accepted resource_type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  distinguished_name: :class:`str` or ``None``
        :param distinguished_name: Directory group distinguished name
        :type  domain_id: :class:`str` or ``None``
        :param domain_id: Domain ID this directory group belongs to.
        :type  domain_name: :class:`str` or ``None``
        :param domain_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  domain_sync_node_id: :class:`str` or ``None``
        :param domain_sync_node_id: Domain sync node under which this directory group is located. We
            currently sync only from Root node and hence this attribute doesn't
            have a specific value set.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.distinguished_name = distinguished_name
        self.domain_id = domain_id
        self.domain_name = domain_name
        self.domain_sync_node_id = domain_sync_node_id
        VapiStruct.__init__(self)

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

DirectoryGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_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'))),
        'distinguished_name': type.OptionalType(type.StringType()),
        'domain_id': type.OptionalType(type.StringType()),
        'domain_name': type.OptionalType(type.StringType()),
        'domain_sync_node_id': type.OptionalType(type.StringType()),
    },
    DirectoryGroup,
    False,
    None))



class DirectoryGroupListResults(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_: 
        :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: Directory group list
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`DirectoryGroup`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`DirectoryGroup`.
        """
        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)


DirectoryGroupListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_group_list_results', {
        '_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__, 'DirectoryGroup')]))),
    },
    DirectoryGroupListResults,
    False,
    None))



class DirectoryGroupMember(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',
                            'group_distinguished_name': 'group_distinguished_name',
                            'group_id': 'group_id',
                            'member_group_distinguished_name': 'member_group_distinguished_name',
                            'member_group_id': 'member_group_id',
                            'nested': 'nested',
                            }

    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,
                 group_distinguished_name=None,
                 group_id=None,
                 member_group_distinguished_name=None,
                 member_group_id=None,
                 nested=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  group_distinguished_name: :class:`str` or ``None``
        :param group_distinguished_name: Directory group distinguished name this group member belongs to.
        :type  group_id: :class:`str` or ``None``
        :param group_id: Directory group id this group member belongs to
        :type  member_group_distinguished_name: :class:`str` or ``None``
        :param member_group_distinguished_name: Directory group name this group member owns
        :type  member_group_id: :class:`str` or ``None``
        :param member_group_id: Directory group id this group member owns
        :type  nested: :class:`bool` or ``None``
        :param nested: Whether this member group is a directory member of the parent group
            speicified by group_id or a nested member group which parent group
            is also member group of the parent group speicified by group_id.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.group_distinguished_name = group_distinguished_name
        self.group_id = group_id
        self.member_group_distinguished_name = member_group_distinguished_name
        self.member_group_id = member_group_id
        self.nested = nested
        VapiStruct.__init__(self)


DirectoryGroupMember._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_group_member', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'group_distinguished_name': type.OptionalType(type.StringType()),
        'group_id': type.OptionalType(type.StringType()),
        'member_group_distinguished_name': type.OptionalType(type.StringType()),
        'member_group_id': type.OptionalType(type.StringType()),
        'nested': type.OptionalType(type.BooleanType()),
    },
    DirectoryGroupMember,
    False,
    None))



class DirectoryGroupMemberListResults(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_: 
        :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:`DirectoryGroupMember` or ``None``
        :param results: Directory group member 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)


DirectoryGroupMemberListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_group_member_list_results', {
        '_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__, 'DirectoryGroupMember'))),
    },
    DirectoryGroupMemberListResults,
    False,
    None))



class DirectoryLdapServer(VapiStruct):
    """
    LDAP server of directory domain

    .. 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',
                            '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,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  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 contraint 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: hostname-or-ip
        :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: int64
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`DirectoryLdapServer.PROTOCOL_LDAP`
            * :attr:`DirectoryLdapServer.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.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)


DirectoryLdapServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_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'))),
        '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()),
    },
    DirectoryLdapServer,
    False,
    None))



class DirectoryLdapServerListResults(VapiStruct):
    """
    List of directory domain LDAP servers

    .. 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_: 
        :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:`DirectoryLdapServer` or ``None``
        :param results: List of directory domain LDAP servers
        """
        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)


DirectoryLdapServerListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_ldap_server_list_results', {
        '_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__, 'DirectoryLdapServer'))),
    },
    DirectoryLdapServerListResults,
    False,
    None))



class DirectoryLdapServerStatus(VapiStruct):
    """
    Status LDAP server of directory domain

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



    _canonical_to_pep_names = {
                            'error_id': 'error_id',
                            'error_message': 'error_message',
                            }

    def __init__(self,
                 error_id=None,
                 error_message=None,
                ):
        """
        :type  error_id: :class:`long` or ``None``
        :param error_id: Error ID of the directory LDAP server status maintained by the NSX
            directory service. format: int64
        :type  error_message: :class:`str` or ``None``
        :param error_message: Error message of the directory LDAP server status maintained by the
            NSX directory service.
        """
        self.error_id = error_id
        self.error_message = error_message
        VapiStruct.__init__(self)


DirectoryLdapServerStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_ldap_server_status', {
        'error_id': type.OptionalType(type.IntegerType()),
        'error_message': type.OptionalType(type.StringType()),
    },
    DirectoryLdapServerStatus,
    False,
    None))



class DirectoryOrgUnit(VapiStruct):
    """
    Organization Unit

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



    _canonical_to_pep_names = {
                            'children': 'children',
                            'distinguished_name': 'distinguished_name',
                            'name': 'name',
                            }

    def __init__(self,
                 children=None,
                 distinguished_name=None,
                 name=None,
                ):
        """
        :type  children: :class:`list` of :class:`DirectoryOrgUnit` or ``None``
        :param children: List of children Organization Units if any.
        :type  distinguished_name: :class:`str` or ``None``
        :param distinguished_name: Distinguished name of the organization unit.
        :type  name: :class:`str` or ``None``
        :param name: Organization Unit name.
        """
        self.children = children
        self.distinguished_name = distinguished_name
        self.name = name
        VapiStruct.__init__(self)


DirectoryOrgUnit._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_org_unit', {
        'children': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DirectoryOrgUnit'))),
        'distinguished_name': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
    },
    DirectoryOrgUnit,
    False,
    None))



class DirectoryOrgUnitListResults(VapiStruct):
    """
    List of organization units

    .. 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_: 
        :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:`DirectoryOrgUnit` or ``None``
        :param results: List of Organization Units
        """
        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)


DirectoryOrgUnitListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.directory_org_unit_list_results', {
        '_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__, 'DirectoryOrgUnit'))),
    },
    DirectoryOrgUnitListResults,
    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.
    """



    _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',
                            'scope': 'scope',
                            'tags': 'tags',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type=None,
                 scope=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_: 
        :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` or ``None``
        :param resource_type: The type of this resource.
        :type  scope: :class:`list` of :class:`DiscoveredResourceScope` or ``None``
        :param scope: Specifies list of scope of discovered resource. e.g. if VHC path is
            associated with principal identity, who owns the discovered
            resource, then scope id will be VHC path and scope type will be
            VHC.
        :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.scope = scope
        self.tags = tags
        VapiStruct.__init__(self)


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.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DiscoveredResourceScope'))),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    DiscoveredResource,
    False,
    None))



class DiscoveredResourceScope(VapiStruct):
    """
    Scope of discovered resource

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


    """
    SCOPE_TYPE_VPC = "VPC"
    """


    """



    _canonical_to_pep_names = {
                            'scope_id': 'scope_id',
                            'scope_type': 'scope_type',
                            }

    def __init__(self,
                 scope_id=None,
                 scope_type=None,
                ):
        """
        :type  scope_id: :class:`str` or ``None``
        :param scope_id: Specifies the scope id of discovered resource.
        :type  scope_type: :class:`str` or ``None``
        :param scope_type: Possible values are: 
            
            * :attr:`DiscoveredResourceScope.SCOPE_TYPE_CONTAINER_CLUSTER`
            * :attr:`DiscoveredResourceScope.SCOPE_TYPE_VPC`
            
            Type of the scope for the discovered resource.
        """
        self.scope_id = scope_id
        self.scope_type = scope_type
        VapiStruct.__init__(self)


DiscoveredResourceScope._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.discovered_resource_scope', {
        'scope_id': type.OptionalType(type.StringType()),
        'scope_type': type.OptionalType(type.StringType()),
    },
    DiscoveredResourceScope,
    False,
    None))



class DiscoveredVifState(VapiStruct):
    """
    State of VIFs connected to discovered segment on the TransportNode.

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


    """
    STATE_ATTACHMENT_IN_PROGRESS = "ATTACHMENT_IN_PROGRESS"
    """


    """
    STATE_ATTACHMENT_SUCCESS = "ATTACHMENT_SUCCESS"
    """


    """
    STATE_ATTACHMENT_FAILED = "ATTACHMENT_FAILED"
    """


    """



    _canonical_to_pep_names = {
                            'error_msg': 'error_msg',
                            'id': 'id',
                            'segment_path': 'segment_path',
                            'segment_port_path': 'segment_port_path',
                            'state': 'state',
                            }

    def __init__(self,
                 error_msg=None,
                 id=None,
                 segment_path=None,
                 segment_port_path=None,
                 state=None,
                ):
        """
        :type  error_msg: :class:`str` or ``None``
        :param error_msg: Error encountered during segment port creation for the discovered
            VIF.
        :type  id: :class:`str` or ``None``
        :param id: Id of discovered VIF.
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Segment path related with discovered VIF.
        :type  segment_port_path: :class:`str` or ``None``
        :param segment_port_path: SegmentPort path related with discovered VIF.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`DiscoveredVifState.STATE_PENDING`
            * :attr:`DiscoveredVifState.STATE_ATTACHMENT_IN_PROGRESS`
            * :attr:`DiscoveredVifState.STATE_ATTACHMENT_SUCCESS`
            * :attr:`DiscoveredVifState.STATE_ATTACHMENT_FAILED`
            
            The state of specific discovered VIF.
        """
        self.error_msg = error_msg
        self.id = id
        self.segment_path = segment_path
        self.segment_port_path = segment_port_path
        self.state = state
        VapiStruct.__init__(self)


DiscoveredVifState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.discovered_vif_state', {
        'error_msg': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'segment_path': type.OptionalType(type.StringType()),
        'segment_port_path': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    DiscoveredVifState,
    False,
    None))



class DiscoveredVifStateListResult(VapiStruct):
    """
    Array of result of discovered VIF state 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_: 
        :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:`DiscoveredVifState` or ``None``
        :param results: Discovered Segment 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.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)


DiscoveredVifStateListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.discovered_vif_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__, 'DiscoveredVifState'))),
    },
    DiscoveredVifStateListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 DnsClientConfig(VapiStruct):
    """
    Dns config

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



    _canonical_to_pep_names = {
                            'dns_server_ips': 'dns_server_ips',
                            }

    def __init__(self,
                 dns_server_ips=None,
                ):
        """
        :type  dns_server_ips: :class:`list` of :class:`str` or ``None``
        :param dns_server_ips: IPs of the DNS servers which need to be configured on the workload
            VMs
        """
        self.dns_server_ips = dns_server_ips
        VapiStruct.__init__(self)


DnsClientConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dns_client_config', {
        'dns_server_ips': type.OptionalType(type.ListType(type.StringType())),
    },
    DnsClientConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_: 
        :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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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: 
        :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 DpuInfo(VapiStruct):
    """
    Details of data processing unit (DPU) present on a ESXi Host.

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


    """
    STATE_UNMANAGED = "UNMANAGED"
    """


    """
    STATE_UNUSED = "UNUSED"
    """


    """
    STATE_MANAGED = "MANAGED"
    """


    """
    STATE_INVALID = "INVALID"
    """


    """



    _canonical_to_pep_names = {
                            'dpu_id': 'dpu_id',
                            'firmware_version': 'firmware_version',
                            'is_primary': 'is_primary',
                            'model': 'model',
                            'os_version': 'os_version',
                            'state': 'state',
                            'vendor': 'vendor',
                            }

    def __init__(self,
                 dpu_id=None,
                 firmware_version=None,
                 is_primary=None,
                 model=None,
                 os_version=None,
                 state=None,
                 vendor=None,
                ):
        """
        :type  dpu_id: :class:`str` or ``None``
        :param dpu_id: Specifies Id of DPU.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  firmware_version: :class:`str` or ``None``
        :param firmware_version: Specifies the firmware version of DPU.
            This 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_primary: :class:`bool` or ``None``
        :param is_primary: Specifies whether this is considered the primary DPU in 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  model: :class:`str` or ``None``
        :param model: Specifies the model of DPU.
            This 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: Specifies the operating system version of DPU.
            This 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:`DpuInfo.STATE_UNAVAILABLE`
            * :attr:`DpuInfo.STATE_UNMANAGED`
            * :attr:`DpuInfo.STATE_UNUSED`
            * :attr:`DpuInfo.STATE_MANAGED`
            * :attr:`DpuInfo.STATE_INVALID`
            
            Specifies state of DPU.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vendor: :class:`str` or ``None``
        :param vendor: Specifies the vendor of DPU.
            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.dpu_id = dpu_id
        self.firmware_version = firmware_version
        self.is_primary = is_primary
        self.model = model
        self.os_version = os_version
        self.state = state
        self.vendor = vendor
        VapiStruct.__init__(self)


DpuInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dpu_info', {
        'dpu_id': type.OptionalType(type.StringType()),
        'firmware_version': type.OptionalType(type.StringType()),
        'is_primary': type.OptionalType(type.BooleanType()),
        'model': type.OptionalType(type.StringType()),
        'os_version': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'vendor': type.OptionalType(type.StringType()),
    },
    DpuInfo,
    False,
    None))



class DpuStatusProperties(VapiStruct):
    """
    Data processing unit status properties

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



    _canonical_to_pep_names = {
                            'cpu_cores': 'cpu_cores',
                            'dpu_id': 'dpu_id',
                            'load_average': 'load_average',
                            'mem_cache': 'mem_cache',
                            'mem_total': 'mem_total',
                            'mem_used': 'mem_used',
                            }

    def __init__(self,
                 cpu_cores=None,
                 dpu_id=None,
                 load_average=None,
                 mem_cache=None,
                 mem_total=None,
                 mem_used=None,
                ):
        """
        :type  cpu_cores: :class:`long` or ``None``
        :param cpu_cores: The number of CPU cores on the system. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dpu_id: :class:`str` or ``None``
        :param dpu_id: Data processing unit 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  load_average: :class:`list` of :class:`float` or ``None``
        :param load_average: One, five, and fifteen minute load averages for 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  mem_cache: :class:`long` or ``None``
        :param mem_cache: Amount of RAM on the system that can be flushed out to disk, in
            kilobytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mem_total: :class:`long` or ``None``
        :param mem_total: System Amount of RAM allocated to the system, in kilobytes. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mem_used: :class:`long` or ``None``
        :param mem_used: Amount of RAM in use on the system, in kilobytes. format: int64
            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.cpu_cores = cpu_cores
        self.dpu_id = dpu_id
        self.load_average = load_average
        self.mem_cache = mem_cache
        self.mem_total = mem_total
        self.mem_used = mem_used
        VapiStruct.__init__(self)


DpuStatusProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dpu_status_properties', {
        'cpu_cores': type.OptionalType(type.IntegerType()),
        'dpu_id': type.OptionalType(type.StringType()),
        'load_average': type.OptionalType(type.ListType(type.DoubleType())),
        'mem_cache': type.OptionalType(type.IntegerType()),
        'mem_total': type.OptionalType(type.IntegerType()),
        'mem_used': type.OptionalType(type.IntegerType()),
    },
    DpuStatusProperties,
    False,
    None))



class DriverConfig(VapiStruct):
    """
    These are driver specific configuration options.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DriverConfig"
    """
    Identifier denoting this class, when it is used 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 = {
                            'driver_info': 'driver_info',
                            'high_performance_config_params': 'high_performance_config_params',
                            'high_performance_config_type': 'high_performance_config_type',
                            'version': 'version',
                            }

    def __init__(self,
                 driver_info=None,
                 high_performance_config_params=None,
                 high_performance_config_type='DriverConfig',
                 version=None,
                ):
        """
        :type  driver_info: :class:`list` of :class:`str` or ``None``
        :param driver_info: This is physical nic driver version.
        :type  high_performance_config_params: :class:`list` of :class:`HighPerformanceConfigParams` or ``None``
        :param high_performance_config_params: List of parameters that could be used to configure high
            performance.
        :type  high_performance_config_type: :class:`str`
        :param high_performance_config_type: Possible values are: 
            
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_ADV_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_DRIVER_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_MISC_CONFIG`
            
            The specific type of config.
        :type  version: :class:`list` of :class:`str` or ``None``
        :param version: Based on the high_performance_config_type, it could be either
            driver version or host version. For high_performance_config_type as
            ADV_CONFIG or MISC_CONFIG, this represents host version. For
            high_performance_config_type as DRIVER_CONFIG, this represents
            physical NIC driver version.
        """
        self.driver_info = driver_info
        self.high_performance_config_params = high_performance_config_params
        self._high_performance_config_type = high_performance_config_type
        self.version = version
        VapiStruct.__init__(self)

    @property
    def high_performance_config_type(self):
        """
        Return the discriminator value
        """
        return self._high_performance_config_type

DriverConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.driver_config', {
        'driver_info': type.OptionalType(type.ListType(type.StringType())),
        'high_performance_config_params': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HighPerformanceConfigParams'))),
        'high_performance_config_type': type.StringType(),
        'version': type.OptionalType(type.ListType(type.StringType())),
    },
    DriverConfig,
    False,
    None))



class DropdownFilterPlotConfiguration(VapiStruct):
    """
    Dropdown Filter plotting configuration.

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



    _canonical_to_pep_names = {
                            'allow_maximize': 'allow_maximize',
                            'condition': 'condition',
                            'allow_search': 'allow_search',
                            }

    def __init__(self,
                 allow_maximize=None,
                 condition=None,
                 allow_search=None,
                ):
        """
        :type  allow_maximize: :class:`bool` or ``None``
        :param allow_maximize: Allow maximize capability for this widget
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the given chart config is applied to
            the widget configuration.
        :type  allow_search: :class:`bool` or ``None``
        :param allow_search: Allow search on drop down filter.
        """
        self.allow_maximize = allow_maximize
        self.condition = condition
        self.allow_search = allow_search
        VapiStruct.__init__(self)


DropdownFilterPlotConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dropdown_filter_plot_configuration', {
        'allow_maximize': type.OptionalType(type.BooleanType()),
        'condition': type.OptionalType(type.StringType()),
        'allow_search': type.OptionalType(type.BooleanType()),
    },
    DropdownFilterPlotConfiguration,
    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_filter_plot_config': 'dropdown_filter_plot_config',
                            '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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 default_value=None,
                 dropdown_filter_plot_config=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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  default_value: :class:`str` or ``None``
        :param default_value: Expression to specify default value of filter.
        :type  dropdown_filter_plot_config: :class:`DropdownFilterPlotConfiguration` or ``None``
        :param dropdown_filter_plot_config: 
        :type  dropdown_item: :class:`DropdownItem` or ``None``
        :param dropdown_item: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        self.default_value = default_value
        self.dropdown_filter_plot_config = dropdown_filter_plot_config
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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_filter_plot_config': type.OptionalType(type.ReferenceType(__name__, 'DropdownFilterPlotConfiguration')),
        '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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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 = {
                            'additional_value': 'additional_value',
                            'display_name': 'display_name',
                            'field': 'field',
                            'short_display_name': 'short_display_name',
                            'value': 'value',
                            }

    def __init__(self,
                 additional_value=None,
                 display_name=None,
                 field=None,
                 short_display_name=None,
                 value=None,
                ):
        """
        :type  additional_value: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param additional_value: An additional key-value pair for item to be display in dropdown.
        :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  short_display_name: :class:`str` or ``None``
        :param short_display_name: Property value is shown in the drop down input box for a filter. If
            the value is not provided 'display_name' property value is used.
        :type  value: :class:`str` or ``None``
        :param value: Value of filter inside dropdown filter.
        """
        self.additional_value = additional_value
        self.display_name = display_name
        self.field = field
        self.short_display_name = short_display_name
        self.value = value
        VapiStruct.__init__(self)


DropdownItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dropdown_item', {
        'additional_value': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'display_name': type.OptionalType(type.StringType()),
        'field': type.OptionalType(type.StringType()),
        'short_display_name': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    DropdownItem,
    False,
    None))



class DscpBit(VapiStruct):
    """
    To define the Dscp bit in Global In-band network telemetry configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DscpBit"
    """
    Identifier denoting this class, when it is used 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 = {
                            'dscp_bit': 'dscp_bit',
                            'indicator_type': 'indicator_type',
                            }

    def __init__(self,
                 dscp_bit=None,
                 indicator_type='DscpBit',
                ):
        """
        :type  dscp_bit: :class:`long` or ``None``
        :param dscp_bit: A DSCP bit is allocated to indicate the existence of INT header. It
            takes effect only when the INT indicator mode is DSCP_BIT. The user
            should guarantee that the given DSCP bit is specifically allocated
            for INT. format: int32
        :type  indicator_type: :class:`str`
        :param indicator_type: Possible values are: 
            
            * :attr:`DscpIndicator.INDICATOR_TYPE_BIT`
            * :attr:`DscpIndicator.INDICATOR_TYPE_VALUE`
            
            The method for indicating the existence of INT header.
        """
        self.dscp_bit = dscp_bit
        self._indicator_type = indicator_type
        VapiStruct.__init__(self)

    @property
    def indicator_type(self):
        """
        Return the discriminator value
        """
        return self._indicator_type

DscpBit._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dscp_bit', {
        'dscp_bit': type.OptionalType(type.IntegerType()),
        'indicator_type': type.StringType(),
    },
    DscpBit,
    False,
    None))



class DscpIndicator(VapiStruct):
    """
    The DscpIndicator is the base class for global In-band network telemetry
    configurations for different types in a NSX domain.

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

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

    """
    INDICATOR_TYPE_BIT = "DSCP_BIT"
    """


    """
    INDICATOR_TYPE_VALUE = "DSCP_VALUE"
    """


    """



    _canonical_to_pep_names = {
                            'indicator_type': 'indicator_type',
                            }

    def __init__(self,
                 indicator_type='DscpIndicator',
                ):
        """
        :type  indicator_type: :class:`str`
        :param indicator_type: Possible values are: 
            
            * :attr:`DscpIndicator.INDICATOR_TYPE_BIT`
            * :attr:`DscpIndicator.INDICATOR_TYPE_VALUE`
            
            The method for indicating the existence of INT header.
        """
        self._indicator_type = indicator_type
        VapiStruct.__init__(self)

    @property
    def indicator_type(self):
        """
        Return the discriminator value
        """
        return self._indicator_type

DscpIndicator._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dscp_indicator', {
        'indicator_type': type.StringType(),
    },
    DscpIndicator,
    False,
    None))



class DscpValue(VapiStruct):
    """
    To define the Dscp value in Global In-band network telemetry configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DscpValue"
    """
    Identifier denoting this class, when it is used 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 = {
                            'dscp_value': 'dscp_value',
                            'indicator_type': 'indicator_type',
                            }

    def __init__(self,
                 dscp_value=None,
                 indicator_type='DscpValue',
                ):
        """
        :type  dscp_value: :class:`long` or ``None``
        :param dscp_value: A DSCP value is allocated to indicate the existence of INT header.
            It takes effects only when the INT indicator mode is DSCP_VALUE.
            The user should guarantee that the given DSCP value is specifically
            allocated for INT. format: int32
        :type  indicator_type: :class:`str`
        :param indicator_type: Possible values are: 
            
            * :attr:`DscpIndicator.INDICATOR_TYPE_BIT`
            * :attr:`DscpIndicator.INDICATOR_TYPE_VALUE`
            
            The method for indicating the existence of INT header.
        """
        self.dscp_value = dscp_value
        self._indicator_type = indicator_type
        VapiStruct.__init__(self)

    @property
    def indicator_type(self):
        """
        Return the discriminator value
        """
        return self._indicator_type

DscpValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dscp_value', {
        'dscp_value': type.OptionalType(type.IntegerType()),
        'indicator_type': type.StringType(),
    },
    DscpValue,
    False,
    None))



class DuplicateAddressBindingEntry(VapiStruct):
    """
    Duplicate address binding information

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


    """
    SOURCE_UNKNOWN = "UNKNOWN"
    """


    """
    SOURCE_USER_DEFINED = "USER_DEFINED"
    """


    """
    SOURCE_ARP_SNOOPING = "ARP_SNOOPING"
    """


    """
    SOURCE_DHCP_SNOOPING = "DHCP_SNOOPING"
    """


    """
    SOURCE_VM_TOOLS = "VM_TOOLS"
    """


    """
    SOURCE_ND_SNOOPING = "ND_SNOOPING"
    """


    """
    SOURCE_DHCPV6_SNOOPING = "DHCPV6_SNOOPING"
    """


    """
    SOURCE_VM_TOOLS_V6 = "VM_TOOLS_V6"
    """


    """



    _canonical_to_pep_names = {
                            'binding': 'binding',
                            'binding_timestamp': 'binding_timestamp',
                            'source': 'source',
                            'conflicting_port': 'conflicting_port',
                            }

    def __init__(self,
                 binding=None,
                 binding_timestamp=None,
                 source=None,
                 conflicting_port=None,
                ):
        """
        :type  binding: :class:`PacketAddressClassifier` or ``None``
        :param binding: 
        :type  binding_timestamp: :class:`long` or ``None``
        :param binding_timestamp: Timestamp at which the binding was discovered via snooping or
            manually specified by the user format: int64
        :type  source: :class:`str` or ``None``
        :param source: Possible values are: 
            
            * :attr:`DuplicateAddressBindingEntry.SOURCE_INVALID`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_UNKNOWN`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_USER_DEFINED`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_ARP_SNOOPING`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_DHCP_SNOOPING`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_VM_TOOLS`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_ND_SNOOPING`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_DHCPV6_SNOOPING`
            * :attr:`DuplicateAddressBindingEntry.SOURCE_VM_TOOLS_V6`
            
            Source from which the address binding entry was obtained
        :type  conflicting_port: :class:`str` or ``None``
        :param conflicting_port: Provides the ID of the port on which the same address bidning
            exists
        """
        self.binding = binding
        self.binding_timestamp = binding_timestamp
        self.source = source
        self.conflicting_port = conflicting_port
        VapiStruct.__init__(self)


DuplicateAddressBindingEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.duplicate_address_binding_entry', {
        'binding': type.OptionalType(type.ReferenceType(__name__, 'PacketAddressClassifier')),
        'binding_timestamp': type.OptionalType(type.IntegerType()),
        'source': type.OptionalType(type.StringType()),
        'conflicting_port': type.OptionalType(type.StringType()),
    },
    DuplicateAddressBindingEntry,
    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 DynamicPluginFileProperties(VapiStruct):
    """
    Plugin file properties

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


    """
    STATUS_FAILURE = "FAILURE"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'file_name': 'file_name',
                            'plugin_path': 'plugin_path',
                            'status': 'status',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 file_name=None,
                 plugin_path=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_: 
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name
        :type  plugin_path: :class:`str` or ``None``
        :param plugin_path: Plugin id
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`DynamicPluginFileProperties.STATUS_SUCCESS`
            * :attr:`DynamicPluginFileProperties.STATUS_FAILURE`
            
            Upload status
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.file_name = file_name
        self.plugin_path = plugin_path
        self.status = status
        VapiStruct.__init__(self)


DynamicPluginFileProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dynamic_plugin_file_properties', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'file_name': type.OptionalType(type.StringType()),
        'plugin_path': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    DynamicPluginFileProperties,
    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_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'acceptance': 'acceptance',
                            }

    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,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  acceptance: :class:`bool` or ``None``
        :param acceptance: Acceptance status of End User License Agreement
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        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')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        '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_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'content': 'content',
                            }

    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,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  content: :class:`str` or ``None``
        :param content: Content of End User License Agreement
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        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')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        '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"
    """


    """
    STATE_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """



    _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`
            * :attr:`EdgeConfigurationState.STATE_REPLACE_FAILED`
            *
              :attr:`EdgeConfigurationState.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`EdgeConfigurationState.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            * :attr:`EdgeConfigurationState.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            * :attr:`EdgeConfigurationState.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`EdgeConfigurationState.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            *
              :attr:`EdgeConfigurationState.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`EdgeConfigurationState.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`EdgeConfigurationState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`EdgeConfigurationState.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`EdgeConfigurationState.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`EdgeConfigurationState.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`EdgeConfigurationState.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`EdgeConfigurationState.STATE_COMPUTE_MANAGER_NOT_FOUND`
            * :attr:`EdgeConfigurationState.STATE_DELETE_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`EdgeConfigurationState.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`EdgeConfigurationState.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`EdgeConfigurationState.STATE_MAINTENANCE_MODE_ENABLED`
            *
              :attr:`EdgeConfigurationState.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`EdgeConfigurationState.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            * :attr:`EdgeConfigurationState.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            *
              :attr:`EdgeConfigurationState.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`EdgeConfigurationState.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            *
              :attr:`EdgeConfigurationState.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            *
              :attr:`EdgeConfigurationState.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            * :attr:`EdgeConfigurationState.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`EdgeConfigurationState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`EdgeConfigurationState.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`EdgeConfigurationState.STATE_REDEPLOY_ACTIVITY_FAILED`
            *
              :attr:`EdgeConfigurationState.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            * :attr:`EdgeConfigurationState.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`EdgeConfigurationState.STATE_REPLACE_ACTIVITY_FAILED`
            * :attr:`EdgeConfigurationState.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_REPLACE_ACTIVITY_SCHEDULED`
            * :attr:`EdgeConfigurationState.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`EdgeConfigurationState.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`EdgeConfigurationState.STATE_RETRYING_REPLACE`
            *
              :attr:`EdgeConfigurationState.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`EdgeConfigurationState.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`EdgeConfigurationState.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`EdgeConfigurationState.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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 EdgeTransportNodeDatapathMemoryPoolUsage(VapiStruct):
    """
    Datapath memory pool usage value.

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



    _canonical_to_pep_names = {
                            'description': 'description',
                            'name': 'name',
                            'usage': 'usage',
                            }

    def __init__(self,
                 description=None,
                 name=None,
                 usage=None,
                ):
        """
        :type  description: :class:`str` or ``None``
        :param description: Description of the memory pool.
            This 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 datapath memory pool as available on edge node CLI.
            This 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: :class:`float` or ``None``
        :param usage: Percentage of memory pool in use.
            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.name = name
        self.usage = usage
        VapiStruct.__init__(self)


EdgeTransportNodeDatapathMemoryPoolUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.edge_transport_node_datapath_memory_pool_usage', {
        'description': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'usage': type.OptionalType(type.DoubleType()),
    },
    EdgeTransportNodeDatapathMemoryPoolUsage,
    False,
    None))



class EdgeTransportNodeDatapathMemoryUsage(VapiStruct):
    """
    Detailed view of the datapath memory usage. Details out the heap and per
    memory pool point in time usage.

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



    _canonical_to_pep_names = {
                            'datapath_heap_usage': 'datapath_heap_usage',
                            'datapath_mem_pools_usage': 'datapath_mem_pools_usage',
                            'highest_datapath_mem_pool_usage': 'highest_datapath_mem_pool_usage',
                            'highest_datapath_mem_pool_usage_names': 'highest_datapath_mem_pool_usage_names',
                            }

    def __init__(self,
                 datapath_heap_usage=None,
                 datapath_mem_pools_usage=None,
                 highest_datapath_mem_pool_usage=None,
                 highest_datapath_mem_pool_usage_names=None,
                ):
        """
        :type  datapath_heap_usage: :class:`float` or ``None``
        :param datapath_heap_usage: Percentage of heap memory in use.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  datapath_mem_pools_usage: :class:`list` of :class:`EdgeTransportNodeDatapathMemoryPoolUsage` or ``None``
        :param datapath_mem_pools_usage: 
        :type  highest_datapath_mem_pool_usage: :class:`float` or ``None``
        :param highest_datapath_mem_pool_usage: Highest percentage usage value among datapath memory 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  highest_datapath_mem_pool_usage_names: :class:`list` of :class:`str` or ``None``
        :param highest_datapath_mem_pool_usage_names: 
        """
        self.datapath_heap_usage = datapath_heap_usage
        self.datapath_mem_pools_usage = datapath_mem_pools_usage
        self.highest_datapath_mem_pool_usage = highest_datapath_mem_pool_usage
        self.highest_datapath_mem_pool_usage_names = highest_datapath_mem_pool_usage_names
        VapiStruct.__init__(self)


EdgeTransportNodeDatapathMemoryUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.edge_transport_node_datapath_memory_usage', {
        'datapath_heap_usage': type.OptionalType(type.DoubleType()),
        'datapath_mem_pools_usage': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EdgeTransportNodeDatapathMemoryPoolUsage'))),
        'highest_datapath_mem_pool_usage': type.OptionalType(type.DoubleType()),
        'highest_datapath_mem_pool_usage_names': type.OptionalType(type.ListType(type.StringType())),
    },
    EdgeTransportNodeDatapathMemoryUsage,
    False,
    None))



class EdgeTransportNodeMemoryUsage(VapiStruct):
    """
    Point in time usage of system, datapath, swap and cache memory in edge
    node.

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



    _canonical_to_pep_names = {
                            'cache_usage': 'cache_usage',
                            'datapath_mem_usage_details': 'datapath_mem_usage_details',
                            'datapath_total_usage': 'datapath_total_usage',
                            'swap_usage': 'swap_usage',
                            'system_mem_usage': 'system_mem_usage',
                            }

    def __init__(self,
                 cache_usage=None,
                 datapath_mem_usage_details=None,
                 datapath_total_usage=None,
                 swap_usage=None,
                 system_mem_usage=None,
                ):
        """
        :type  cache_usage: :class:`float` or ``None``
        :param cache_usage: Percentage of RAM on the system that can be flushed out to disk.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  datapath_mem_usage_details: :class:`EdgeTransportNodeDatapathMemoryUsage` or ``None``
        :param datapath_mem_usage_details: 
        :type  datapath_total_usage: :class:`float` or ``None``
        :param datapath_total_usage: Percentage of memory in use by datapath processes which includes
            RES and hugepage memory.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  swap_usage: :class:`float` or ``None``
        :param swap_usage: Percentage of swap disk in use.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_mem_usage: :class:`float` or ``None``
        :param system_mem_usage: Percentage of RAM in use on 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.cache_usage = cache_usage
        self.datapath_mem_usage_details = datapath_mem_usage_details
        self.datapath_total_usage = datapath_total_usage
        self.swap_usage = swap_usage
        self.system_mem_usage = system_mem_usage
        VapiStruct.__init__(self)


EdgeTransportNodeMemoryUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.edge_transport_node_memory_usage', {
        'cache_usage': type.OptionalType(type.DoubleType()),
        'datapath_mem_usage_details': type.OptionalType(type.ReferenceType(__name__, 'EdgeTransportNodeDatapathMemoryUsage')),
        'datapath_total_usage': type.OptionalType(type.DoubleType()),
        'swap_usage': type.OptionalType(type.DoubleType()),
        'system_mem_usage': type.OptionalType(type.DoubleType()),
    },
    EdgeTransportNodeMemoryUsage,
    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 EffectiveProfilesResponse(VapiStruct):
    """
    Enforcement point request entity

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



    _canonical_to_pep_names = {
                            'profiles_list': 'profiles_list',
                            }

    def __init__(self,
                 profiles_list=None,
                ):
        """
        :type  profiles_list: :class:`list` of :class:`SwitchingProfileTypeIdEntry` or ``None``
        :param profiles_list: 
        """
        self.profiles_list = profiles_list
        VapiStruct.__init__(self)


EffectiveProfilesResponse._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.effective_profiles_response', {
        'profiles_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SwitchingProfileTypeIdEntry'))),
    },
    EffectiveProfilesResponse,
    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 Endpoint(VapiStruct):
    """
    An Endpoint object is part of HostSwitch configuration in TransportNode

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



    _canonical_to_pep_names = {
                            'default_gateway': 'default_gateway',
                            'device_name': 'device_name',
                            'ip': 'ip',
                            'ipv6': 'ipv6',
                            'label': 'label',
                            'mac': 'mac',
                            'subnet_mask': 'subnet_mask',
                            }

    def __init__(self,
                 default_gateway=None,
                 device_name=None,
                 ip=None,
                 ipv6=None,
                 label=None,
                 mac=None,
                 subnet_mask=None,
                ):
        """
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Gateway 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.
        :type  device_name: :class:`str` or ``None``
        :param device_name: Name of the virtual tunnel endpoint
            This 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: :class:`str` or ``None``
        :param ip: Depending upon the EndpointIpConfig used in HostSwitch, IP could be
            allocated either from DHCP (default) or from Static IP 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.
        :type  ipv6: :class:`IPv6EndPoint` or ``None``
        :param ipv6: 
        :type  label: :class:`long` or ``None``
        :param label: Unique label for this Endpoint 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: :class:`str` or ``None``
        :param mac: MAC address 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  subnet_mask: :class:`str` or ``None``
        :param subnet_mask: Subnet mask 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.default_gateway = default_gateway
        self.device_name = device_name
        self.ip = ip
        self.ipv6 = ipv6
        self.label = label
        self.mac = mac
        self.subnet_mask = subnet_mask
        VapiStruct.__init__(self)


Endpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.endpoint', {
        'default_gateway': type.OptionalType(type.StringType()),
        'device_name': type.OptionalType(type.StringType()),
        'ip': type.OptionalType(type.StringType()),
        'ipv6': type.OptionalType(type.ReferenceType(__name__, 'IPv6EndPoint')),
        'label': type.OptionalType(type.IntegerType()),
        'mac': type.OptionalType(type.StringType()),
        'subnet_mask': type.OptionalType(type.StringType()),
    },
    Endpoint,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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: 
        :type  pending_changes_info: :class:`PendingChangesInfoNsxt` or ``None``
        :param pending_changes_info: 
        """
        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: 
        :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: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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"
    """


    """
    RESOURCE_TYPE_AVICONNECTIONINFO = "AviConnectionInfo"
    """


    """



    _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`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_AVICONNECTIONINFO`
            
            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_: 
        :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 of instances of
    an entity type that can be created. Lowering the limit on the number of
    instances of a given type is allowed even in cases where there are
    instances more than the specified limit already in the system. In this
    case, creation of new instances of that type will be disallowed unless the
    number of instances goes below the limit. One of the main usage of this
    expression is to implement Quotas in the multi-tenancy context. It allows
    to limit the number of resources which can be created inside a Project or
    Vpc. It also forbids consumption of specific resource by putting its entity
    count to 0. Note that, update/delete operations will continue to be allowed
    on already created instances.

    .. 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',
                            'target_resource_type': 'target_resource_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',
                            }

    def __init__(self,
                 count=None,
                 operator=None,
                 target_resource_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='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  target_resource_type: :class:`str` or ``None``
        :param target_resource_type: Target resource type accepts input as DTO Type or FQDN. It also
            supports dot format like SecurityPolicy.Rule in a scenario where
            same DTO type shared across across policy sub tree. For example DTO
            type Rule shared by both security policy and gateway policy rules.
            So to specify any constraint for Security policy rule, user can
            define the target resource type SecurityPolicy.Rule.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.target_resource_type = target_resource_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
        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()),
        'target_resource_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'))),
    },
    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: 
        """
        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: 
        :type  user_metadata: :class:`ErrorResolverUserMetadata` or ``None``
        :param user_metadata: 
        """
        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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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: 
            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"
    """


    """
    MODE_ROUTE_SERVER = "ROUTE_SERVER"
    """


    """
    MODE_DISABLE = "DISABLE"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'advanced_config': 'advanced_config',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 advanced_config=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  advanced_config: :class:`EvpnConfigAdvancedConfig` or ``None``
        :param advanced_config: 
        :type  encapsulation_method: :class:`EvpnEncapConfig` or ``None``
        :param encapsulation_method: 
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`EvpnConfig.MODE_INLINE`
            * :attr:`EvpnConfig.MODE_ROUTE_SERVER`
            * :attr:`EvpnConfig.MODE_DISABLE`
            
            In INLINE mode, edge nodes participate both in the BGP EVPN control
            plane route exchange and in data path tunneling between edge nodes
            and data center gateways. In ROUTE_SERVER mode, edge nodes
            participate in the BGP EVPN control plane route exchanges only and
            do not participate in the data forwarding, i.e., the data path
            tunnels are directly established between the hypervisors and the
            data center gateways. DISABLE mode disables EVPN service
            capability.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.advanced_config = advanced_config
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'advanced_config': type.OptionalType(type.ReferenceType(__name__, 'EvpnConfigAdvancedConfig')),
        'encapsulation_method': type.OptionalType(type.ReferenceType(__name__, 'EvpnEncapConfig')),
        'mode': type.OptionalType(type.StringType()),
    },
    EvpnConfig,
    False,
    None))



class EvpnConfigAdvancedConfig(VapiStruct):
    """
    NSX specific configuration for evpn config

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




    def __init__(self,
                ):
        """
        """
        VapiStruct.__init__(self)


EvpnConfigAdvancedConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evpn_config_advanced_config', {
    },
    EvpnConfigAdvancedConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'evpn_tenant_config_path': 'evpn_tenant_config_path',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 evpn_tenant_config_path=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_tenant_config_path: :class:`str` or ``None``
        :param evpn_tenant_config_path: EVPN tenant config path
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.evpn_tenant_config_path = evpn_tenant_config_path
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_tenant_config_path': type.OptionalType(type.StringType()),
        'vni_pool_path': type.OptionalType(type.StringType()),
    },
    EvpnEncapConfig,
    False,
    None))



class EvpnTenantConfig(VapiStruct):
    """
    This resource is relevant only when Evpn Service is configured in
    ROUTE-SERVER mode. The resource defines Vlans to VNIs mappings used by Evpn
    tenant VMs for overlay VXLAN transmission when attached to vRouter. The
    resource contains overlay transport_zone_path and vni_pool_path to
    orchestrate creation of child Logical-Switches.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'mappings': 'mappings',
                            'transport_zone_path': 'transport_zone_path',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 mappings=None,
                 transport_zone_path=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  mappings: :class:`list` of :class:`VlanVniRangePair` or ``None``
        :param mappings: This property specifies a mapping spec of incoming Evpn tenant
            vlan-ids to VXLAN VNIs used for overlay transmission to
            Physical-Gateways used by vRouters.
        :type  transport_zone_path: :class:`str` or ``None``
        :param transport_zone_path: Policy path to transport zone. Only overlay transport zone is
            supported.
        :type  vni_pool_path: :class:`str` or ``None``
        :param vni_pool_path: Policy path to the vni pool used for Evpn in ROUTE-SERVER 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.mappings = mappings
        self.transport_zone_path = transport_zone_path
        self.vni_pool_path = vni_pool_path
        VapiStruct.__init__(self)


EvpnTenantConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evpn_tenant_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'mappings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VlanVniRangePair'))),
        'transport_zone_path': type.OptionalType(type.StringType()),
        'vni_pool_path': type.OptionalType(type.StringType()),
    },
    EvpnTenantConfig,
    False,
    None))



class EvpnTenantConfigListResult(VapiStruct):
    """
    Collection of Evpn Tenant 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_: 
        :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:`EvpnTenantConfig` or ``None``
        :param results: Evpn Tenant 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)


EvpnTenantConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evpn_tenant_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__, 'EvpnTenantConfig'))),
    },
    EvpnTenantConfigListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 ExcludedMembersList(VapiStruct):
    """
    Represents the list of members that need to be excluded

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



    _canonical_to_pep_names = {
                            'ip_address_expression': 'ip_address_expression',
                            'path_expression': 'path_expression',
                            }

    def __init__(self,
                 ip_address_expression=None,
                 path_expression=None,
                ):
        """
        :type  ip_address_expression: :class:`IPAddressExpression` or ``None``
        :param ip_address_expression: 
        :type  path_expression: :class:`PathExpression` or ``None``
        :param path_expression: 
        """
        self.ip_address_expression = ip_address_expression
        self.path_expression = path_expression
        VapiStruct.__init__(self)


ExcludedMembersList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.excluded_members_list', {
        'ip_address_expression': type.OptionalType(type.ReferenceType(__name__, 'IPAddressExpression')),
        'path_expression': type.OptionalType(type.ReferenceType(__name__, 'PathExpression')),
    },
    ExcludedMembersList,
    False,
    None))



class ExportRequestParameter(VapiStruct):
    """
    This holds the request parameters required to invoke export task.

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



    _canonical_to_pep_names = {
                            'draft_path': 'draft_path',
                            'passphrase': 'passphrase',
                            }

    def __init__(self,
                 draft_path=None,
                 passphrase=None,
                ):
        """
        :type  draft_path: :class:`str` or ``None``
        :param draft_path: Policy path of a draft which is to be exported. If not provided,
            current firewall configuration will then be exported.
        :type  passphrase: :class:`str` or ``None``
        :param passphrase: Passphrase to sign exported 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 non-space
            special character.
        """
        self.draft_path = draft_path
        self.passphrase = passphrase
        VapiStruct.__init__(self)


ExportRequestParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.export_request_parameter', {
        'draft_path': type.OptionalType(type.StringType()),
        'passphrase': type.OptionalType(type.StringType()),
    },
    ExportRequestParameter,
    False,
    None))



class ExportTask(VapiStruct):
    """
    This object holds the information of the export task.

    .. 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',
                            'failure_msg': 'failure_msg',
                            'draft_path': 'draft_path',
                            'exported_file': 'exported_file',
                            }

    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,
                 failure_msg=None,
                 draft_path=None,
                 exported_file=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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:`ExportTask.STATUS_RUNNING`
            * :attr:`ExportTask.STATUS_ERROR`
            * :attr:`ExportTask.STATUS_SUCCESS`
            * :attr:`ExportTask.STATUS_CANCELING`
            * :attr:`ExportTask.STATUS_CANCELED`
            * :attr:`ExportTask.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.
        :type  failure_msg: :class:`str` or ``None``
        :param failure_msg: This property holds the reason of the task failure, if 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  draft_path: :class:`str` or ``None``
        :param draft_path: Policy path of a draft if this is an export task to export draft
            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  exported_file: :class:`str` or ``None``
        :param exported_file: Name of the exported file generated after completion of export
            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
        self.failure_msg = failure_msg
        self.draft_path = draft_path
        self.exported_file = exported_file
        VapiStruct.__init__(self)


ExportTask._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.export_task', {
        '_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()),
        'failure_msg': type.OptionalType(type.StringType()),
        'draft_path': type.OptionalType(type.StringType()),
        'exported_file': type.OptionalType(type.StringType()),
    },
    ExportTask,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 ExternalGatewayBfdConfig(VapiStruct):
    """
    Configuration for BFD session between host nodes and external gateways. If
    this configuration is not provided, system defaults are applied.

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



    _canonical_to_pep_names = {
                            'bfd_profile_path': 'bfd_profile_path',
                            'enable': 'enable',
                            }

    def __init__(self,
                 bfd_profile_path=None,
                 enable=None,
                ):
        """
        :type  bfd_profile_path: :class:`str` or ``None``
        :param bfd_profile_path: Policy path to Bfd Profile
        :type  enable: :class:`bool` or ``None``
        :param enable: Flag to enable BFD session.
        """
        self.bfd_profile_path = bfd_profile_path
        self.enable = enable
        VapiStruct.__init__(self)


ExternalGatewayBfdConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.external_gateway_bfd_config', {
        'bfd_profile_path': type.OptionalType(type.StringType()),
        'enable': type.OptionalType(type.BooleanType()),
    },
    ExternalGatewayBfdConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'tls_fips_enabled': 'tls_fips_enabled',
                            }

    def __init__(self,
                 lb_fips_enabled=None,
                 tls_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.
        :type  tls_fips_enabled: :class:`bool` or ``None``
        :param tls_fips_enabled: When this flag is set to true FIPS mode will be set on ssl
            encryptions of TLS inspection feature.
            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.lb_fips_enabled = lb_fips_enabled
        self.tls_fips_enabled = tls_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()),
        'tls_fips_enabled': type.OptionalType(type.BooleanType()),
    },
    FIPSGlobalConfig,
    False,
    None))



class FabricHostNode(VapiStruct):
    """


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


    """
    MAINTENANCE_MODE_STATE_ENTERING = "ENTERING"
    """


    """
    MAINTENANCE_MODE_STATE_ON = "ON"
    """


    """
    OS_TYPE_ESXI = "ESXI"
    """


    """
    OS_TYPE_RHELKVM = "RHELKVM"
    """


    """
    OS_TYPE_RHELSERVER = "RHELSERVER"
    """


    """
    OS_TYPE_WINDOWSSERVER = "WINDOWSSERVER"
    """


    """
    OS_TYPE_RHELCONTAINER = "RHELCONTAINER"
    """


    """
    OS_TYPE_UBUNTUKVM = "UBUNTUKVM"
    """


    """
    OS_TYPE_UBUNTUSERVER = "UBUNTUSERVER"
    """


    """
    OS_TYPE_HYPERV = "HYPERV"
    """


    """
    OS_TYPE_CENTOSKVM = "CENTOSKVM"
    """


    """
    OS_TYPE_CENTOSSERVER = "CENTOSSERVER"
    """


    """
    OS_TYPE_CENTOSCONTAINER = "CENTOSCONTAINER"
    """


    """
    OS_TYPE_SLESKVM = "SLESKVM"
    """


    """
    OS_TYPE_SLESSERVER = "SLESSERVER"
    """


    """
    OS_TYPE_OELSERVER = "OELSERVER"
    """


    """



    _canonical_to_pep_names = {
                            'compute_collection_id': 'compute_collection_id',
                            'discovered_ip_addresses': 'discovered_ip_addresses',
                            'discovered_node_id': 'discovered_node_id',
                            'dpu': 'dpu',
                            'fqdn': 'fqdn',
                            'host_credential': 'host_credential',
                            'ip_addresses': 'ip_addresses',
                            'maintenance_mode_state': 'maintenance_mode_state',
                            'managed_by_server': 'managed_by_server',
                            'os_type': 'os_type',
                            'os_version': 'os_version',
                            'windows_install_location': 'windows_install_location',
                            }

    def __init__(self,
                 compute_collection_id=None,
                 discovered_ip_addresses=None,
                 discovered_node_id=None,
                 dpu=None,
                 fqdn=None,
                 host_credential=None,
                 ip_addresses=None,
                 maintenance_mode_state=None,
                 managed_by_server=None,
                 os_type=None,
                 os_version=None,
                 windows_install_location=None,
                ):
        """
        :type  compute_collection_id: :class:`str` or ``None``
        :param compute_collection_id: Id of the compute collection to which discovered 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  discovered_ip_addresses: :class:`list` of :class:`str` or ``None``
        :param discovered_ip_addresses: Discovered IP Addresses of the transport node, version 4 or 6
            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  discovered_node_id: :class:`str` or ``None``
        :param discovered_node_id: Id of discovered node which was converted to create this 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  dpu: :class:`list` of :class:`DpuInfo` or ``None``
        :param dpu: Specifies details of data processing units (DPU) present on ESXi
            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  fqdn: :class:`str` or ``None``
        :param fqdn: Fully qualified domain 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  host_credential: :class:`HostNodeLoginCredential` or ``None``
        :param host_credential: 
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: IP Addresses of the Node, version 4 or 6. format: ip
        :type  maintenance_mode_state: :class:`str` or ``None``
        :param maintenance_mode_state: Possible values are: 
            
            * :attr:`FabricHostNode.MAINTENANCE_MODE_STATE_OFF`
            * :attr:`FabricHostNode.MAINTENANCE_MODE_STATE_ENTERING`
            * :attr:`FabricHostNode.MAINTENANCE_MODE_STATE_ON`
            
            Indicates host node's maintenance mode state. The state is ENTERING
            when a task to put the host in maintenance-mode is in progress.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  managed_by_server: :class:`str` or ``None``
        :param managed_by_server: The id of the vCenter server managing the ESXi type HostNode
            This 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: Possible values are: 
            
            * :attr:`FabricHostNode.OS_TYPE_ESXI`
            * :attr:`FabricHostNode.OS_TYPE_RHELKVM`
            * :attr:`FabricHostNode.OS_TYPE_RHELSERVER`
            * :attr:`FabricHostNode.OS_TYPE_WINDOWSSERVER`
            * :attr:`FabricHostNode.OS_TYPE_RHELCONTAINER`
            * :attr:`FabricHostNode.OS_TYPE_UBUNTUKVM`
            * :attr:`FabricHostNode.OS_TYPE_UBUNTUSERVER`
            * :attr:`FabricHostNode.OS_TYPE_HYPERV`
            * :attr:`FabricHostNode.OS_TYPE_CENTOSKVM`
            * :attr:`FabricHostNode.OS_TYPE_CENTOSSERVER`
            * :attr:`FabricHostNode.OS_TYPE_CENTOSCONTAINER`
            * :attr:`FabricHostNode.OS_TYPE_SLESKVM`
            * :attr:`FabricHostNode.OS_TYPE_SLESSERVER`
            * :attr:`FabricHostNode.OS_TYPE_OELSERVER`
            
            Hypervisor type, for example ESXi or RHEL KVM
        :type  os_version: :class:`str` or ``None``
        :param os_version: Version of the hypervisor operating system
        :type  windows_install_location: :class:`str` or ``None``
        :param windows_install_location: Specify an installation folder to install the NSX kernel modules
            for Windows Server. By default, it is C:\\Program
            Files\\VMware\\NSX\\.
        """
        self.compute_collection_id = compute_collection_id
        self.discovered_ip_addresses = discovered_ip_addresses
        self.discovered_node_id = discovered_node_id
        self.dpu = dpu
        self.fqdn = fqdn
        self.host_credential = host_credential
        self.ip_addresses = ip_addresses
        self.maintenance_mode_state = maintenance_mode_state
        self.managed_by_server = managed_by_server
        self.os_type = os_type
        self.os_version = os_version
        self.windows_install_location = windows_install_location
        VapiStruct.__init__(self)


FabricHostNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.fabric_host_node', {
        'compute_collection_id': type.OptionalType(type.StringType()),
        'discovered_ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'discovered_node_id': type.OptionalType(type.StringType()),
        'dpu': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DpuInfo'))),
        'fqdn': type.OptionalType(type.StringType()),
        'host_credential': type.OptionalType(type.ReferenceType(__name__, 'HostNodeLoginCredential')),
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'maintenance_mode_state': type.OptionalType(type.StringType()),
        'managed_by_server': type.OptionalType(type.StringType()),
        'os_type': type.OptionalType(type.StringType()),
        'os_version': type.OptionalType(type.StringType()),
        'windows_install_location': type.OptionalType(type.StringType()),
    },
    FabricHostNode,
    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 FeaturePermissionArray(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'feature_permissions': 'feature_permissions',
                            }

    def __init__(self,
                 feature_permissions=None,
                ):
        """
        :type  feature_permissions: :class:`list` of :class:`FeaturePermission` or ``None``
        :param feature_permissions: Array of FeaturePermission
        """
        self.feature_permissions = feature_permissions
        VapiStruct.__init__(self)


FeaturePermissionArray._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.feature_permission_array', {
        'feature_permissions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FeaturePermission'))),
    },
    FeaturePermissionArray,
    False,
    None))



class FeaturePermissionListResult(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_: 
        :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:`FeaturePermission` 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)


FeaturePermissionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.feature_permission_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__, 'FeaturePermission'))),
    },
    FeaturePermissionListResult,
    False,
    None))



class FeatureSet(VapiStruct):
    """
    Represents list of features required to view the widget.

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



    _canonical_to_pep_names = {
                            'feature_list': 'feature_list',
                            'require_all_permissions': 'require_all_permissions',
                            }

    def __init__(self,
                 feature_list=None,
                 require_all_permissions=None,
                ):
        """
        :type  feature_list: :class:`list` of :class:`str` or ``None``
        :param feature_list: List of features required for to view widget.
        :type  require_all_permissions: :class:`bool` or ``None``
        :param require_all_permissions: Flag for specifying if permission to all features is required If
            set to false, then if there is permission for any of the feature
            from feature list, widget will be available.
        """
        self.feature_list = feature_list
        self.require_all_permissions = require_all_permissions
        VapiStruct.__init__(self)


FeatureSet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.feature_set', {
        'feature_list': type.OptionalType(type.ListType(type.StringType())),
        'require_all_permissions': type.OptionalType(type.BooleanType()),
    },
    FeatureSet,
    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_: 
        :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 FederationQueueInfo(VapiStruct):
    """
    Provides insights into details of a specific queue in the flows. For
    example Global Manager to Local Manager flow, there is a queue on the
    Global Manager for sending and a queue on Local Manager for receiving.

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


    """
    TYPE_RECEIVER = "RECEIVER"
    """


    """



    _canonical_to_pep_names = {
                            'current_size': 'current_size',
                            'max_size': 'max_size',
                            'name': 'name',
                            'namespace': 'namespace',
                            'type': 'type',
                            }

    def __init__(self,
                 current_size=None,
                 max_size=None,
                 name=None,
                 namespace=None,
                 type=None,
                ):
        """
        :type  current_size: :class:`long` or ``None``
        :param current_size: Number of messages in the queue format: int64
        :type  max_size: :class:`long` or ``None``
        :param max_size: Maixmum capacity of the queue format: int64
        :type  name: :class:`str` or ``None``
        :param name: Queue name
        :type  namespace: :class:`str` or ``None``
        :param namespace: Every persistent queue has name and namespace. For more debugging
            like dumping queue, namespace is needed.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`FederationQueueInfo.TYPE_TRANSMITTER`
            * :attr:`FederationQueueInfo.TYPE_RECEIVER`
            
            Queue type - sender or receiver side
        """
        self.current_size = current_size
        self.max_size = max_size
        self.name = name
        self.namespace = namespace
        self.type = type
        VapiStruct.__init__(self)


FederationQueueInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_queue_info', {
        'current_size': type.OptionalType(type.IntegerType()),
        'max_size': type.OptionalType(type.IntegerType()),
        'name': type.OptionalType(type.StringType()),
        'namespace': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    FederationQueueInfo,
    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_: 
        :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"
    """


    """
    CHECKS_IPV6_CIDRS = "ALL_IPV6_CIDRS"
    """


    """
    CHECKS_IPV6_IPS = "ALL_IPV6_IPS"
    """


    """
    CHECKS_IPV4_CIDRS = "ALL_IPV4_CIDRS"
    """


    """
    CHECKS_IPV4_IPS = "ALL_IPV4_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`
            * :attr:`FieldSanityConstraintExpression.CHECKS_IPV6_CIDRS`
            * :attr:`FieldSanityConstraintExpression.CHECKS_IPV6_IPS`
            * :attr:`FieldSanityConstraintExpression.CHECKS_IPV4_CIDRS`
            * :attr:`FieldSanityConstraintExpression.CHECKS_IPV4_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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: 
            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 FieldsFilterData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FieldsFilterData"
    """
    Identifier denoting this class, when it is used 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_info': 'ip_info',
                            'network_info': 'network_info',
                            'transport_info': 'transport_info',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 ip_info=None,
                 network_info=None,
                 transport_info=None,
                 resource_type='FieldsFilterData',
                ):
        """
        :type  ip_info: :class:`IpInfo` or ``None``
        :param ip_info: 
        :type  network_info: :class:`NetworkInfo` or ``None``
        :param network_info: 
        :type  transport_info: :class:`TransportInfo` or ``None``
        :param transport_info: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LiveTraceFilterData.RESOURCE_TYPE_FIELDSFILTERDATA`
            * :attr:`LiveTraceFilterData.RESOURCE_TYPE_PLAINFILTERDATA`
            
            Filter type
        """
        self.ip_info = ip_info
        self.network_info = network_info
        self.transport_info = transport_info
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

FieldsFilterData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.fields_filter_data', {
        'ip_info': type.OptionalType(type.ReferenceType(__name__, 'IpInfo')),
        'network_info': type.OptionalType(type.ReferenceType(__name__, 'NetworkInfo')),
        'transport_info': type.OptionalType(type.ReferenceType(__name__, 'TransportInfo')),
        'resource_type': type.StringType(),
    },
    FieldsFilterData,
    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: 
        :type  eth_header: :class:`EthernetHeader` or ``None``
        :param eth_header: 
        :type  ip_header: :class:`Ipv4Header` or ``None``
        :param ip_header: 
        :type  ipv6_header: :class:`Ipv6Header` or ``None``
        :param 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: 
        :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: When this flag is set, traceflow packet will have its destination
            overwritten as the gateway address of the logical router to which
            the source logical switch is connected. More specifically: - For
            ARP request, the target IP will be overwritten as gateway IP if the
            target IP is not in the same subnet of gateway. - For ARP response,
            the target IP and destination MAC will be overwritten as gateway
            IP/MAC respectively, if the target IP is not in the same subnet of
            gateway. - For IP packet, the destination MAC will be overwritten
            as gateway MAC. However, this flag will not be effective when
            injecting the traceflow packet to a VLAN backed port. This is
            because the gateway in this case is a physical gateway that is
            outside the scope of NSX. Therefore, users need to manually
            populate the gateway MAC address. If the user still sets this flag
            in this case, a validation error will be thrown.
        :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`
            
            This type takes effect only for IP 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"
    """


    """
    SCHEME_NAME_KEY = "KEY"
    """


    """



    _canonical_to_pep_names = {
                            'identity_file': 'identity_file',
                            'password': 'password',
                            'scheme_name': 'scheme_name',
                            'username': 'username',
                            }

    def __init__(self,
                 identity_file=None,
                 password=None,
                 scheme_name=None,
                 username=None,
                ):
        """
        :type  identity_file: :class:`str` or ``None``
        :param identity_file: SSH private key data
        :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`
            * :attr:`FileTransferAuthenticationScheme.SCHEME_NAME_KEY`
            
            Authentication scheme name
        :type  username: :class:`str` or ``None``
        :param username: User name to authenticate with
        """
        self.identity_file = identity_file
        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', {
        'identity_file': type.OptionalType(type.StringType()),
        '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: 
        :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 FilterRequest(VapiStruct):
    """
    Filter request parameters

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



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'field_names': 'field_names',
                            'value': 'value',
                            }

    def __init__(self,
                 case_sensitive=None,
                 field_names=None,
                 value=None,
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: Set this flag to true to make filtering case-sensitive.
        :type  field_names: :class:`str` or ``None``
        :param field_names: Comma separated fields to be filtered on
        :type  value: :class:`str` or ``None``
        :param value: Filter value
        """
        self.case_sensitive = case_sensitive
        self.field_names = field_names
        self.value = value
        VapiStruct.__init__(self)


FilterRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.filter_request', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'field_names': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    FilterRequest,
    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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'global_addrset_mode_enabled': 'global_addrset_mode_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='FirewallConfiguration',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 disable_auto_drafts=None,
                 enable_firewall=None,
                 global_addrset_mode_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate 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.
        :type  global_addrset_mode_enabled: :class:`bool` or ``None``
        :param global_addrset_mode_enabled: When this flag is set to true, global address set is enabled in
            Distributed Firewall.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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
        self.global_addrset_mode_enabled = global_addrset_mode_enabled
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'global_addrset_mode_enabled': type.OptionalType(type.BooleanType()),
    },
    FirewallConfiguration,
    False,
    None))



class FirstnSampling(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FirstNSampling"
    """
    Identifier denoting this class, when it is used 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 = {
                            'match_number': 'match_number',
                            'sampling_type': 'sampling_type',
                            }

    def __init__(self,
                 match_number=None,
                 sampling_type='FirstNSampling',
                ):
        """
        :type  match_number: :class:`long` or ``None``
        :param match_number: Number of packets to be sampled format: int64
        :type  sampling_type: :class:`str`
        :param sampling_type: Possible values are: 
            
            * :attr:`SamplingArgument.SAMPLING_TYPE_FIRSTNSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_PACKETNUMBERSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_INTERVALSAMPLING`
            
            Sampling type
        """
        self.match_number = match_number
        self._sampling_type = sampling_type
        VapiStruct.__init__(self)

    @property
    def sampling_type(self):
        """
        Return the discriminator value
        """
        return self._sampling_type

FirstnSampling._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.firstn_sampling', {
        'match_number': type.OptionalType(type.IntegerType()),
        'sampling_type': type.StringType(),
    },
    FirstnSampling,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 FlowInfo(VapiStruct):
    """
    Provides details of config flow in federation Federation has the following
    flows - Global Manager to Local Manager (GM -> LM) - Local Manager to
    Glocal Manager (LM -> GM) - Global Manager Active to Glocal Manager Standby
    (GM -> GM) - Local Manager to Local Manager (LM -> LM)

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


    """
    FLOW_TYPE_LM_TO_GM = "LM_TO_GM"
    """


    """
    FLOW_TYPE_GM_TO_GM = "GM_TO_GM"
    """


    """
    FLOW_TYPE_LM_TO_LM = "LM_TO_LM"
    """


    """
    FLOW_TYPE_GM_WORK_QUEUE = "GM_WORK_QUEUE"
    """


    """
    FLOW_TYPE_GM_DELETE_QUEUE = "GM_DELETE_QUEUE"
    """


    """



    _canonical_to_pep_names = {
                            'cross_site_flow_info': 'cross_site_flow_info',
                            'flow_type': 'flow_type',
                            'id': 'id',
                            'queue_infos': 'queue_infos',
                            }

    def __init__(self,
                 cross_site_flow_info=None,
                 flow_type=None,
                 id=None,
                 queue_infos=None,
                ):
        """
        :type  cross_site_flow_info: :class:`CrossSiteFlowInfo` or ``None``
        :param cross_site_flow_info: 
        :type  flow_type: :class:`str` or ``None``
        :param flow_type: Possible values are: 
            
            * :attr:`FlowInfo.FLOW_TYPE_GM_TO_LM`
            * :attr:`FlowInfo.FLOW_TYPE_LM_TO_GM`
            * :attr:`FlowInfo.FLOW_TYPE_GM_TO_GM`
            * :attr:`FlowInfo.FLOW_TYPE_LM_TO_LM`
            * :attr:`FlowInfo.FLOW_TYPE_GM_WORK_QUEUE`
            * :attr:`FlowInfo.FLOW_TYPE_GM_DELETE_QUEUE`
            
            Flow identifier
        :type  id: :class:`str` or ``None``
        :param id: System identifier for the flow
        :type  queue_infos: :class:`list` of :class:`FederationQueueInfo` or ``None``
        :param queue_infos: Every flow will have transmitter and receiver queues.
        """
        self.cross_site_flow_info = cross_site_flow_info
        self.flow_type = flow_type
        self.id = id
        self.queue_infos = queue_infos
        VapiStruct.__init__(self)


FlowInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.flow_info', {
        'cross_site_flow_info': type.OptionalType(type.ReferenceType(__name__, 'CrossSiteFlowInfo')),
        'flow_type': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'queue_infos': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FederationQueueInfo'))),
    },
    FlowInfo,
    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: 
        :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 FormFactorDetail(VapiStruct):
    """
    Form factor contains, resources required to deploy NSX Application Platform
    deployment and available features for a given form factor.

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



    _canonical_to_pep_names = {
                            'node_resources': 'node_resources',
                            'supported_features': 'supported_features',
                            }

    def __init__(self,
                 node_resources=None,
                 supported_features=None,
                ):
        """
        :type  node_resources: :class:`NodeResources` or ``None``
        :param node_resources: 
        :type  supported_features: :class:`list` of :class:`str` or ``None``
        :param supported_features: Features supported in this form factor.
        """
        self.node_resources = node_resources
        self.supported_features = supported_features
        VapiStruct.__init__(self)


FormFactorDetail._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.form_factor_detail', {
        'node_resources': type.OptionalType(type.ReferenceType(__name__, 'NodeResources')),
        'supported_features': type.OptionalType(type.ListType(type.StringType())),
    },
    FormFactorDetail,
    False,
    None))



class FormFactors(VapiStruct):
    """
    Different form factor for deployment.

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



    _canonical_to_pep_names = {
                            'advanced': 'advanced',
                            'evaluation': 'evaluation',
                            'standard': 'standard',
                            }

    def __init__(self,
                 advanced=None,
                 evaluation=None,
                 standard=None,
                ):
        """
        :type  advanced: :class:`FormFactorDetail` or ``None``
        :param advanced: 
        :type  evaluation: :class:`FormFactorDetail` or ``None``
        :param evaluation: 
        :type  standard: :class:`FormFactorDetail` or ``None``
        :param standard: 
        """
        self.advanced = advanced
        self.evaluation = evaluation
        self.standard = standard
        VapiStruct.__init__(self)


FormFactors._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.form_factors', {
        'advanced': type.OptionalType(type.ReferenceType(__name__, 'FormFactorDetail')),
        'evaluation': type.OptionalType(type.ReferenceType(__name__, 'FormFactorDetail')),
        'standard': type.OptionalType(type.ReferenceType(__name__, 'FormFactorDetail')),
    },
    FormFactors,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 ForwardingPolicyStatisticsForEnforcementPoint(VapiStruct):
    """
    Forwarding policy 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: Path for a specific 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:`ForwardingPolicyStats` or ``None``
        :param statistics: 
        """
        self.enforcement_point = enforcement_point
        self.statistics = statistics
        VapiStruct.__init__(self)


ForwardingPolicyStatisticsForEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_policy_statistics_for_enforcement_point', {
        'enforcement_point': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'ForwardingPolicyStats')),
    },
    ForwardingPolicyStatisticsForEnforcementPoint,
    False,
    None))



class ForwardingPolicyStatisticsListResult(VapiStruct):
    """
    Paged Collection of Forwarding 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_: 
        :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:`ForwardingPolicyStatisticsForEnforcementPoint` or ``None``
        :param results: Forwarding 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)


ForwardingPolicyStatisticsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_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__, 'ForwardingPolicyStatisticsForEnforcementPoint'))),
    },
    ForwardingPolicyStatisticsListResult,
    False,
    None))



class ForwardingPolicyStats(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',
                            'section_id': 'section_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                 section_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_: 
        :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:`ForwardingRuleStats` 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.
        :type  section_id: :class:`str` or ``None``
        :param section_id: Forwarding policy 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.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        self.section_id = section_id
        VapiStruct.__init__(self)


ForwardingPolicyStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_policy_stats', {
        '_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__, 'ForwardingRuleStats'))),
        'section_id': type.OptionalType(type.StringType()),
    },
    ForwardingPolicyStats,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate the rule. Default is activated.
        :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 deactivated.
        :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. Instead of Layer 7 service profiles you can use a L7
            access profile. One of either Layer 7 service profiles or L7 Access
            Profile can be used in firewall rule. In case of L7 access profile
            only one is allowed.
        :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. Even
            though there is no limitation on length of a tag, internally tag
            will get truncated after 32 characters.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 ForwardingRuleStatisticsForEnforcementPoint(VapiStruct):
    """
    Forwarding 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: Path for a specific 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:`ForwardingRuleStats` or ``None``
        :param statistics: 
        """
        self.enforcement_point = enforcement_point
        self.statistics = statistics
        VapiStruct.__init__(self)


ForwardingRuleStatisticsForEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_rule_statistics_for_enforcement_point', {
        'enforcement_point': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'ForwardingRuleStats')),
    },
    ForwardingRuleStatisticsForEnforcementPoint,
    False,
    None))



class ForwardingRuleStatisticsListResult(VapiStruct):
    """
    Paged Collection of Forwarding 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_: 
        :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:`ForwardingRuleStatisticsForEnforcementPoint` or ``None``
        :param results: ForwardingRuleStatistics 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)


ForwardingRuleStatisticsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_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__, 'ForwardingRuleStatisticsForEnforcementPoint'))),
    },
    ForwardingRuleStatisticsListResult,
    False,
    None))



class ForwardingRuleStats(VapiStruct):
    """
    FP 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_',
                            'byte_count': 'byte_count',
                            'hit_count': 'hit_count',
                            'internal_rule_id': 'internal_rule_id',
                            'l7_accept_count': 'l7_accept_count',
                            'l7_reject_count': 'l7_reject_count',
                            'l7_reject_with_response_count': 'l7_reject_with_response_count',
                            '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,
                 l7_accept_count=None,
                 l7_reject_count=None,
                 l7_reject_with_response_count=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_: 
        :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  l7_accept_count: :class:`long` or ``None``
        :param l7_accept_count: Aggregated number of L7 Profile Accepted counters 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  l7_reject_count: :class:`long` or ``None``
        :param l7_reject_count: Aggregated number of L7 Profile Rejected counters 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  l7_reject_with_response_count: :class:`long` or ``None``
        :param l7_reject_with_response_count: Aggregated number of L7 Profile Rejected with Response counters
            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  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.l7_accept_count = l7_accept_count
        self.l7_reject_count = l7_reject_count
        self.l7_reject_with_response_count = l7_reject_with_response_count
        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)


ForwardingRuleStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_rule_stats', {
        '_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()),
        'l7_accept_count': type.OptionalType(type.IntegerType()),
        'l7_reject_count': type.OptionalType(type.IntegerType()),
        'l7_reject_with_response_count': type.OptionalType(type.IntegerType()),
        '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()),
    },
    ForwardingRuleStats,
    False,
    None))



class FqdnAnalysisConfig(VapiStruct):
    """
    The type contains information about the configuration of the FqdnAnalysis
    feature for a specific 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Property which specifies the enabling/disabling of the feature.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        VapiStruct.__init__(self)


FqdnAnalysisConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.fqdn_analysis_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    FqdnAnalysisConfig,
    False,
    None))



class FullSyncInfo(VapiStruct):
    """
    Represents details of the last full sync if full sync is not running,
    otherwise returns the status of current full sync.

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


    """
    REASON_CODE_QUEUE_OVERFLOW_ON_RECEIVER = "QUEUE_OVERFLOW_ON_RECEIVER"
    """


    """
    REASON_CODE_CONNECTION_RESTORED = "CONNECTION_RESTORED"
    """


    """
    REASON_CODE_LM_ONBOARDED = "LM_ONBOARDED"
    """


    """
    REASON_CODE_GM_SWITCHOVER = "GM_SWITCHOVER"
    """


    """
    REASON_CODE_RESTORED_GM_FROM_BACKUP = "RESTORED_GM_FROM_BACKUP"
    """


    """
    REASON_CODE_RESTORED_LM_FROM_BACKUP = "RESTORED_LM_FROM_BACKUP"
    """


    """
    REASON_CODE_BROWNFIELD_CONFIG_MIGRATION_FROM_LM_TO_GM = "BROWNFIELD_CONFIG_MIGRATION_FROM_LM_TO_GM"
    """


    """
    REASON_CODE_GM_REQUESTED_OVERSIZED_PAYLOAD = "GM_REQUESTED_OVERSIZED_PAYLOAD"
    """


    """
    REASON_CODE_GM_REQUESTED_SITE_ONBOARDING = "GM_REQUESTED_SITE_ONBOARDING"
    """


    """
    REASON_CODE_GM_REQUESTED_OTHER = "GM_REQUESTED_OTHER"
    """


    """
    REASON_CODE_LM_REQUSTED_OVERSIZED_PAYLOAD = "LM_REQUSTED_OVERSIZED_PAYLOAD"
    """


    """
    REASON_CODE_LM_REQUESTED_OTHER = "LM_REQUESTED_OTHER"
    """


    """
    REASON_CODE_USER_REQUSTED = "USER_REQUSTED"
    """


    """
    REASON_CODE_OTHER_AR_INTERNAL = "OTHER_AR_INTERNAL"
    """


    """
    REASON_CODE_POST_UPGRADE_GM = "POST_UPGRADE_GM"
    """


    """
    REASON_CODE_POST_UPGRADE_LM = "POST_UPGRADE_LM"
    """


    """
    REASON_CODE_UNKNOWN = "UNKNOWN"
    """


    """
    STAGE_NOT_STARTED = "NOT_STARTED"
    """


    """
    STAGE_REQUESTED_FULL_STATE_FROM_SOURCE = "REQUESTED_FULL_STATE_FROM_SOURCE"
    """


    """
    STAGE_TRANSFERRING_FULL_STATE = "TRANSFERRING_FULL_STATE"
    """


    """
    STAGE_COMPLETED_TRANSFERRING_FULL_STATE = "COMPLETED_TRANSFERRING_FULL_STATE"
    """


    """
    STAGE_DESTINATION_APPLYING_FULL_STATE = "DESTINATION_APPLYING_FULL_STATE"
    """


    """
    STAGE_COMPLETED_SUCCESSFUL = "COMPLETED_SUCCESSFUL"
    """


    """
    STAGE_TIMEOUT_ON_SOURCE_RECEIVE_FULL_STATE = "TIMEOUT_ON_SOURCE_RECEIVE_FULL_STATE"
    """


    """
    STAGE_TIMEOUT_ON_DESTINATION_APPLY = "TIMEOUT_ON_DESTINATION_APPLY"
    """


    """
    STAGE_COMPLETED_FAILED = "COMPLETED_FAILED"
    """


    """
    STATUS_NOT_STARTED = "NOT_STARTED"
    """


    """
    STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    STATUS_COMPLETED = "COMPLETED"
    """


    """



    _canonical_to_pep_names = {
                            'data_streaming_from_source_end_time': 'data_streaming_from_source_end_time',
                            'data_streaming_from_source_progress': 'data_streaming_from_source_progress',
                            'data_streaming_from_source_start_time': 'data_streaming_from_source_start_time',
                            'end_time': 'end_time',
                            'errors': 'errors',
                            'fullSyncId': 'full_sync_id',
                            'reason': 'reason',
                            'reason_code': 'reason_code',
                            'receiver_end_time': 'receiver_end_time',
                            'receiver_start_time': 'receiver_start_time',
                            'receiver_state': 'receiver_state',
                            'receiver_time_to_apply_in_millis': 'receiver_time_to_apply_in_millis',
                            'stage': 'stage',
                            'start_time': 'start_time',
                            'status': 'status',
                            'warnings': 'warnings',
                            }

    def __init__(self,
                 data_streaming_from_source_end_time=None,
                 data_streaming_from_source_progress=None,
                 data_streaming_from_source_start_time=None,
                 end_time=None,
                 errors=None,
                 full_sync_id=None,
                 reason=None,
                 reason_code=None,
                 receiver_end_time=None,
                 receiver_start_time=None,
                 receiver_state=None,
                 receiver_time_to_apply_in_millis=None,
                 stage=None,
                 start_time=None,
                 status=None,
                 warnings=None,
                ):
        """
        :type  data_streaming_from_source_end_time: :class:`long` or ``None``
        :param data_streaming_from_source_end_time: End time of streaming full state from source format: int64
        :type  data_streaming_from_source_progress: :class:`str` or ``None``
        :param data_streaming_from_source_progress: Details about full sync on sender side
        :type  data_streaming_from_source_start_time: :class:`long` or ``None``
        :param data_streaming_from_source_start_time: Start time of streaming full state from source format: int64
        :type  end_time: :class:`long` or ``None``
        :param end_time: Full sync end time format: int64
        :type  errors: :class:`list` of :class:`str` or ``None``
        :param errors: Errors if any
        :type  full_sync_id: :class:`str` or ``None``
        :param full_sync_id: Full sync id
        :type  reason: :class:`str` or ``None``
        :param reason: Description of full sync reason
        :type  reason_code: :class:`str` or ``None``
        :param reason_code: Possible values are: 
            
            * :attr:`FullSyncInfo.REASON_CODE_QUEUE_OVERFLOW_ON_TRANSMITTER`
            * :attr:`FullSyncInfo.REASON_CODE_QUEUE_OVERFLOW_ON_RECEIVER`
            * :attr:`FullSyncInfo.REASON_CODE_CONNECTION_RESTORED`
            * :attr:`FullSyncInfo.REASON_CODE_LM_ONBOARDED`
            * :attr:`FullSyncInfo.REASON_CODE_GM_SWITCHOVER`
            * :attr:`FullSyncInfo.REASON_CODE_RESTORED_GM_FROM_BACKUP`
            * :attr:`FullSyncInfo.REASON_CODE_RESTORED_LM_FROM_BACKUP`
            *
              :attr:`FullSyncInfo.REASON_CODE_BROWNFIELD_CONFIG_MIGRATION_FROM_LM_TO_GM`
            * :attr:`FullSyncInfo.REASON_CODE_GM_REQUESTED_OVERSIZED_PAYLOAD`
            * :attr:`FullSyncInfo.REASON_CODE_GM_REQUESTED_SITE_ONBOARDING`
            * :attr:`FullSyncInfo.REASON_CODE_GM_REQUESTED_OTHER`
            * :attr:`FullSyncInfo.REASON_CODE_LM_REQUSTED_OVERSIZED_PAYLOAD`
            * :attr:`FullSyncInfo.REASON_CODE_LM_REQUESTED_OTHER`
            * :attr:`FullSyncInfo.REASON_CODE_USER_REQUSTED`
            * :attr:`FullSyncInfo.REASON_CODE_OTHER_AR_INTERNAL`
            * :attr:`FullSyncInfo.REASON_CODE_POST_UPGRADE_GM`
            * :attr:`FullSyncInfo.REASON_CODE_POST_UPGRADE_LM`
            * :attr:`FullSyncInfo.REASON_CODE_UNKNOWN`
            
            Full sync can happen for various internal reasons, as well user can
            request for one. The code provides the classification of possible
            reasons to start a full sync.
        :type  receiver_end_time: :class:`long` or ``None``
        :param receiver_end_time: End time of completing applying full state on receiver side format:
            int64
        :type  receiver_start_time: :class:`long` or ``None``
        :param receiver_start_time: Start time of applying full state on receiver side format: int64
        :type  receiver_state: :class:`str` or ``None``
        :param receiver_state: This is optional information, provides useful insights on receiver
            side once async channel hands over full state data to receiver.
        :type  receiver_time_to_apply_in_millis: :class:`long` or ``None``
        :param receiver_time_to_apply_in_millis: Time taken by application receiver to apply the full state received
            format: int64
        :type  stage: :class:`str` or ``None``
        :param stage: Possible values are: 
            
            * :attr:`FullSyncInfo.STAGE_NOT_STARTED`
            * :attr:`FullSyncInfo.STAGE_REQUESTED_FULL_STATE_FROM_SOURCE`
            * :attr:`FullSyncInfo.STAGE_TRANSFERRING_FULL_STATE`
            * :attr:`FullSyncInfo.STAGE_COMPLETED_TRANSFERRING_FULL_STATE`
            * :attr:`FullSyncInfo.STAGE_DESTINATION_APPLYING_FULL_STATE`
            * :attr:`FullSyncInfo.STAGE_COMPLETED_SUCCESSFUL`
            * :attr:`FullSyncInfo.STAGE_TIMEOUT_ON_SOURCE_RECEIVE_FULL_STATE`
            * :attr:`FullSyncInfo.STAGE_TIMEOUT_ON_DESTINATION_APPLY`
            * :attr:`FullSyncInfo.STAGE_COMPLETED_FAILED`
            
            This provides the insights into current full sync stage if in
            progress.
        :type  start_time: :class:`long` or ``None``
        :param start_time: Full sync start time format: int64
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`FullSyncInfo.STATUS_NOT_STARTED`
            * :attr:`FullSyncInfo.STATUS_IN_PROGRESS`
            * :attr:`FullSyncInfo.STATUS_COMPLETED`
            
            Full sync status
        :type  warnings: :class:`list` of :class:`str` or ``None``
        :param warnings: Errors if any
        """
        self.data_streaming_from_source_end_time = data_streaming_from_source_end_time
        self.data_streaming_from_source_progress = data_streaming_from_source_progress
        self.data_streaming_from_source_start_time = data_streaming_from_source_start_time
        self.end_time = end_time
        self.errors = errors
        self.full_sync_id = full_sync_id
        self.reason = reason
        self.reason_code = reason_code
        self.receiver_end_time = receiver_end_time
        self.receiver_start_time = receiver_start_time
        self.receiver_state = receiver_state
        self.receiver_time_to_apply_in_millis = receiver_time_to_apply_in_millis
        self.stage = stage
        self.start_time = start_time
        self.status = status
        self.warnings = warnings
        VapiStruct.__init__(self)


FullSyncInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.full_sync_info', {
        'data_streaming_from_source_end_time': type.OptionalType(type.IntegerType()),
        'data_streaming_from_source_progress': type.OptionalType(type.StringType()),
        'data_streaming_from_source_start_time': type.OptionalType(type.IntegerType()),
        'end_time': type.OptionalType(type.IntegerType()),
        'errors': type.OptionalType(type.ListType(type.StringType())),
        'fullSyncId': type.OptionalType(type.StringType()),
        'reason': type.OptionalType(type.StringType()),
        'reason_code': type.OptionalType(type.StringType()),
        'receiver_end_time': type.OptionalType(type.IntegerType()),
        'receiver_start_time': type.OptionalType(type.IntegerType()),
        'receiver_state': type.OptionalType(type.StringType()),
        'receiver_time_to_apply_in_millis': type.OptionalType(type.IntegerType()),
        'stage': type.OptionalType(type.StringType()),
        'start_time': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
        'warnings': type.OptionalType(type.ListType(type.StringType())),
    },
    FullSyncInfo,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'last_update_time': 'last_update_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 last_update_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Deprecated, refer to last_update_time for the last update time
            stamp. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.

            .. deprecated:: unknown
        :type  last_update_time: :class:`long` or ``None``
        :param last_update_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.last_update_time = last_update_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'last_update_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_: 
        :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 = {
                            'nat_active_conn_limit': 'nat_active_conn_limit',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 nat_active_conn_limit=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='GatewayFloodProtectionProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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  nat_active_conn_limit: :class:`long` or ``None``
        :param nat_active_conn_limit: The maximum limit of active NAT connections. This limit only apply
            to EDGE components (such as, gateway). If this property is omitted,
            or set to null, then there is no limit on the specific component.
            Meanwhile there is an implicit limit which depends on the
            underlying hardware resource. 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.nat_active_conn_limit = nat_active_conn_limit
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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', {
        'nat_active_conn_limit': 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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 GatewayGeneralSecurityProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GatewayGeneralSecurityProfile"
    """
    Identifier denoting this class, when it is used 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_double_flow': 'enable_double_flow',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 enable_double_flow=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='GatewayGeneralSecurityProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  enable_double_flow: :class:`bool` or ``None``
        :param enable_double_flow: The flag to indicate double flow check is enabled or not. This
            option applies only to EDGE components.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`GeneralSecurityProfile.RESOURCE_TYPE_GATEWAYGENERALSECURITYPROFILE`
            
            GatewayGeneralSecurityProfile is used for all Tier0 and Tier1
            gateways.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.enable_double_flow = enable_double_flow
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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

GatewayGeneralSecurityProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_general_security_profile', {
        'enable_double_flow': 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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    GatewayGeneralSecurityProfile,
    False,
    None))



class GatewayInterfaceReference(VapiStruct):
    """
    Contains gateway interface details.

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



    _canonical_to_pep_names = {
                            'interface_path': 'interface_path',
                            }

    def __init__(self,
                 interface_path=None,
                ):
        """
        :type  interface_path: :class:`str` or ``None``
        :param interface_path: Absolute policy path of member interface.
        """
        self.interface_path = interface_path
        VapiStruct.__init__(self)


GatewayInterfaceReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_interface_reference', {
        'interface_path': type.OptionalType(type.StringType()),
    },
    GatewayInterfaceReference,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'burst_size': 'burst_size',
                            'committed_bandwidth': 'committed_bandwidth',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 burst_size=None,
                 committed_bandwidth=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_bandwidth: :class:`long` or ``None``
        :param committed_bandwidth: Committed bandwidth in both directions specified in Mbps. Bandwidth
            is limited to line rate when the value configured is greater than
            line rate. format: int32
        :type  committed_bandwitdth: :class:`long` or ``None``
        :param committed_bandwitdth: Committed bandwidth in both directions specified in Mbps. Bandwidth
            is limited to line rate when the value configured is greater than
            line rate. This property is deprecated, use committed_bandwidth
            instead. format: int32

            .. deprecated:: unknown
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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_bandwidth = committed_bandwidth
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_bandwidth': 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_: 
        :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 GatewayRecoverySiteConfig(VapiStruct):
    """
    Recovery site config

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



    _canonical_to_pep_names = {
                            'failover_linked_tier1_gateway': 'failover_linked_tier1_gateway',
                            'tier0_gateway_path': 'tier0_gateway_path',
                            'to_primary_site_path': 'to_primary_site_path',
                            }

    def __init__(self,
                 failover_linked_tier1_gateway=None,
                 tier0_gateway_path=None,
                 to_primary_site_path=None,
                ):
        """
        :type  failover_linked_tier1_gateway: :class:`bool` or ``None``
        :param failover_linked_tier1_gateway: Linked Tier1 gateway whose primary site matches from_site_path and
            are stretched to new primary site are recovered on new primary site
            path.
        :type  tier0_gateway_path: :class:`str` or ``None``
        :param tier0_gateway_path: Path of Tier-0 gateway
        :type  to_primary_site_path: :class:`str` or ``None``
        :param to_primary_site_path: Recovery site path
        """
        self.failover_linked_tier1_gateway = failover_linked_tier1_gateway
        self.tier0_gateway_path = tier0_gateway_path
        self.to_primary_site_path = to_primary_site_path
        VapiStruct.__init__(self)


GatewayRecoverySiteConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_recovery_site_config', {
        'failover_linked_tier1_gateway': type.OptionalType(type.BooleanType()),
        'tier0_gateway_path': type.OptionalType(type.StringType()),
        'to_primary_site_path': type.OptionalType(type.StringType()),
    },
    GatewayRecoverySiteConfig,
    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',
                            'black_hole': 'black_hole',
                            'edge_path': 'edge_path',
                            'interface': '_interface',
                            'lr_component_id': 'lr_component_id',
                            'lr_component_type': 'lr_component_type',
                            'network': 'network',
                            'next_hop': 'next_hop',
                            'next_hop_gateway': 'next_hop_gateway',
                            'route_type': 'route_type',
                            }

    def __init__(self,
                 admin_distance=None,
                 black_hole=None,
                 edge_path=None,
                 _interface=None,
                 lr_component_id=None,
                 lr_component_type=None,
                 network=None,
                 next_hop=None,
                 next_hop_gateway=None,
                 route_type=None,
                ):
        """
        :type  admin_distance: :class:`long` or ``None``
        :param admin_distance: The admin distance of the next hop format: int64
        :type  black_hole: :class:`bool` or ``None``
        :param black_hole: Value of this field will be true if given routes are null routes
            This 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 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  next_hop_gateway: :class:`str` or ``None``
        :param next_hop_gateway: Next hop gateway path
        :type  route_type: :class:`str` or ``None``
        :param route_type: Route type (USER, CONNECTED, NSX_INTERNAL,..)
        """
        self.admin_distance = admin_distance
        self.black_hole = black_hole
        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.next_hop_gateway = next_hop_gateway
        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()),
        'black_hole': type.OptionalType(type.BooleanType()),
        '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()),
        'next_hop_gateway': 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 GatewaySiteFailoverActionConfig(VapiStruct):
    """
    configuration to trigger site failover for one or more Tier0 and linked
    Tier1 gateway(s).

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



    _canonical_to_pep_names = {
                            'from_site_path': 'from_site_path',
                            'to_primary_site_config': 'to_primary_site_config',
                            }

    def __init__(self,
                 from_site_path=None,
                 to_primary_site_config=None,
                ):
        """
        :type  from_site_path: :class:`str` or ``None``
        :param from_site_path: Source site path for failover. Gateway whose primary site path
            matches from_site_path are considered for recovery.
        :type  to_primary_site_config: :class:`list` of :class:`GatewayRecoverySiteConfig` or ``None``
        :param to_primary_site_config: Recovery stie for Tier-0 gateway and linked Tier-1 gateway.
        """
        self.from_site_path = from_site_path
        self.to_primary_site_config = to_primary_site_config
        VapiStruct.__init__(self)


GatewaySiteFailoverActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_site_failover_action_config', {
        'from_site_path': type.OptionalType(type.StringType()),
        'to_primary_site_config': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GatewayRecoverySiteConfig'))),
    },
    GatewaySiteFailoverActionConfig,
    False,
    None))



class GeneralSecurityProfile(VapiStruct):
    """
    A profile holding general security settings.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GeneralSecurityProfile"
    """
    Identifier denoting this class, when it is used 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_GATEWAYGENERALSECURITYPROFILE = "GatewayGeneralSecurityProfile"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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='GeneralSecurityProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`GeneralSecurityProfile.RESOURCE_TYPE_GATEWAYGENERALSECURITYPROFILE`
            
            GatewayGeneralSecurityProfile is used for all Tier0 and Tier1
            gateways.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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

GeneralSecurityProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.general_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.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    GeneralSecurityProfile,
    False,
    None))



class GeneralSecurityProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between General Security
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


GeneralSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.general_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    GeneralSecurityProfileBindingMap,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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_: 
        :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 GlobalCollectorConfig(VapiStruct):
    """
    The GlobalCollectorConfig is the base class for global collector
    configurations for different types in a NSX domain.

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

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

    """
    COLLECTOR_TYPE_VRNI = "VRNI"
    """


    """
    COLLECTOR_TYPE_WAVE_FRONT = "WAVE_FRONT"
    """


    """



    _canonical_to_pep_names = {
                            'collector_ip': 'collector_ip',
                            'collector_port': 'collector_port',
                            'collector_type': 'collector_type',
                            }

    def __init__(self,
                 collector_ip=None,
                 collector_port=None,
                 collector_type='GlobalCollectorConfig',
                ):
        """
        :type  collector_ip: :class:`str` or ``None``
        :param collector_ip: IP address for the global collector. format: ip
        :type  collector_port: :class:`long` or ``None``
        :param collector_port: Port for the global collector. format: int32
        :type  collector_type: :class:`str`
        :param collector_type: Possible values are: 
            
            * :attr:`GlobalCollectorConfig.COLLECTOR_TYPE_VRNI`
            * :attr:`GlobalCollectorConfig.COLLECTOR_TYPE_WAVE_FRONT`
            
            Specify the global collector type.
        """
        self.collector_ip = collector_ip
        self.collector_port = collector_port
        self._collector_type = collector_type
        VapiStruct.__init__(self)

    @property
    def collector_type(self):
        """
        Return the discriminator value
        """
        return self._collector_type

GlobalCollectorConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_collector_config', {
        'collector_ip': type.OptionalType(type.StringType()),
        'collector_port': type.OptionalType(type.IntegerType()),
        'collector_type': type.StringType(),
    },
    GlobalCollectorConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'allow_changing_vdr_mac_in_use': 'allow_changing_vdr_mac_in_use',
                            'arp_limit_per_gateway': 'arp_limit_per_gateway',
                            'external_gateway_bfd': 'external_gateway_bfd',
                            'fips': 'fips',
                            'global_replication_mode_enabled': 'global_replication_mode_enabled',
                            'is_inherited': 'is_inherited',
                            'l3_forwarding_mode': 'l3_forwarding_mode',
                            'lb_ecmp': 'lb_ecmp',
                            'mtu': 'mtu',
                            'operation_collectors': 'operation_collectors',
                            'physical_uplink_mtu': 'physical_uplink_mtu',
                            'remote_tunnel_physical_mtu': 'remote_tunnel_physical_mtu',
                            'site_infos': 'site_infos',
                            'uplink_mtu_threshold': 'uplink_mtu_threshold',
                            'vdr_mac': 'vdr_mac',
                            'vdr_mac_nested': 'vdr_mac_nested',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 allow_changing_vdr_mac_in_use=None,
                 arp_limit_per_gateway=None,
                 external_gateway_bfd=None,
                 fips=None,
                 global_replication_mode_enabled=None,
                 is_inherited=None,
                 l3_forwarding_mode=None,
                 lb_ecmp=None,
                 mtu=None,
                 operation_collectors=None,
                 physical_uplink_mtu=None,
                 remote_tunnel_physical_mtu=None,
                 site_infos=None,
                 uplink_mtu_threshold=None,
                 vdr_mac=None,
                 vdr_mac_nested=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_changing_vdr_mac_in_use: :class:`bool` or ``None``
        :param allow_changing_vdr_mac_in_use: When this flag is set to true, it is allowed to change the VDR MAC
            being used by existing transport nodes in a NSX system. The VDR MAC
            used by a host switch in a transport node is decided by the OVERLAY
            transport zone(s) which the host switch joins. If any of the
            OVERLAY transport zone(s) has \"nested_nsx\" property set to true,
            the MAC in \"vdr_mac_nested\" is used; otherwise the MAC in
            \"vdr_mac\" is used. Thus the VDR MAC being used by a host switch
            in a transport node can be changed in below ways. If the host
            switch is not in any OVERLAY transport zone whose \"nested_nsx\"
            property is true but is in an OVERLAY transport zone, the first way
            is updating the \"vdr_mac\" property. The 2nd way is updating one
            of the OVERLAY transport zones joined by the host switch to set
            \"nested_nsx\" property true which will make the host switch use
            the VDR MAC in \"vdr_mac_nested\". The third way is directly
            updating the transport node to add an OVERLAY transport zone whose
            \"nested_nsx\" property is true into the host switch which will
            also make the host switch use the VDR MAC in \"vdr_mac_nested\". If
            the host switch is in some OVERLAY transport zone(s) whose
            \"nested_nsx\" property is true, the first way is updating the
            \"vdr_mac_nested\" property. The 2nd way is updating all those
            OVERLAY transport zones to set \"nested_nsx\" property false which
            will make the host switch use the VDR MAC in \"vdr_mac\". The third
            way is directly updating the transport node to remove all those
            OVERLAY transport zones from the host switch which will also make
            the host switch use the VDR MAC in \"vdr_mac\". Please note that
            changing the VDR MAC being used by existing transport nodes will
            most likely cause traffic disruption and network outage!
        :type  arp_limit_per_gateway: :class:`long` or ``None``
        :param arp_limit_per_gateway: Global configuration of maximum number of ARP entries per transport
            node at each Tier0/Tier1 gateway. format: int32
        :type  external_gateway_bfd: :class:`ExternalGatewayBfdConfig` or ``None``
        :param external_gateway_bfd: 
        :type  fips: :class:`FIPSGlobalConfig` or ``None``
        :param fips: 
        :type  global_replication_mode_enabled: :class:`bool` or ``None``
        :param global_replication_mode_enabled: When this flag is set true, certain types of BUM packets will be
            sent to all VTEPs in the global VTEP table, ignoring the logical
            switching span.
        :type  is_inherited: :class:`bool` or ``None``
        :param is_inherited: if True, meaning that this is a copy version of GM if False,
            meaning that this is a local version on LM
        :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  lb_ecmp: :class:`bool` or ``None``
        :param lb_ecmp: Flag to activate/deactivate ECMP load balancing. By default ECMP
            load balancing is deactivated.
        :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. This is the global
            default MTU for all the EXTERNAL (uplink) and SERVICE (CSP)
            interfaces in the NSX domain. There is no option to override this
            value at the transport zone level or transport node level. format:
            int32
        :type  operation_collectors: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param operation_collectors: This property is a part of OpsGlobalConfig object. Use
            /infra/ops-global-config instead. The VRNI and WAVE_FRONT collector
            type can be defined to collect the metric data. The WAVE_FRONT
            collector type can only be used in VMC mode.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`GlobalCollectorConfig`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`GlobalCollectorConfig`.

            .. deprecated:: unknown
        :type  physical_uplink_mtu: :class:`long` or ``None``
        :param physical_uplink_mtu: This is the global default MTU for all the physical uplinks in a
            NSX domain. This is the default value for the optional uplink
            profile MTU field. When the MTU value is not specified in the
            uplink profile, this global value will be used. This value can be
            overridden by providing a value for the optional MTU field in the
            uplink profile. Whenever this value is updated, the updated value
            will only be propagated to the uplinks that don't have the MTU
            value in their uplink profiles. If this value is not set, the
            default value of 1700 will be used. The Transport Node state can be
            monitored to confirm if the updated MTU value has been realized.
            format: int32
        :type  remote_tunnel_physical_mtu: :class:`long` or ``None``
        :param remote_tunnel_physical_mtu: This is the global default MTU for all the physical remote tunnel
            endpoints in an NSX domain. Please consider intersite link MTU
            minus any external overhead when defining the MTU. If this value is
            not set, the default value of 1500 will be used. format: int32
        :type  site_infos: :class:`list` of :class:`SiteInfo` or ``None``
        :param site_infos: Information related to sites applicable for given config.
        :type  uplink_mtu_threshold: :class:`long` or ``None``
        :param uplink_mtu_threshold: This value defines the upper threshold for the Maximum Transmission
            Unit (MTU) value that can be configured at a physical uplink level
            or a logical routing uplink level in a NSX domain. All Uplink
            profiles validate against this value so that the MTU specified in
            an Uplink profile does not exceed this global upper threshold.
            Similarly, when this value is modified, the new value must be
            greater than or equal to any existing Uplink profile's MTU. format:
            int32
        :type  vdr_mac: :class:`str` or ``None``
        :param vdr_mac: This is the global default MAC address for all VDRs in all
            transport nodes in a NSX system. It can be changed only when there
            is no transport node in the NSX system. This value cannot be same
            as vdr_mac_nested. When the property
            \"allow_changing_vdr_mac_in_use\" is false, it can not be changed
            if the current VDR MAC is being used by any transport node. A
            transport node uses this VDR MAC if any host switch in the node is
            in OVERLAY transport zone(s) but none of the transport zone(s) has
            \"nested_nsx\" property being true. format: mac-address
        :type  vdr_mac_nested: :class:`str` or ``None``
        :param vdr_mac_nested: This is the global default MAC address for all VDRs in all
            transport nodes in a NSX system nested in another NSX system. It
            can be changed only when there is no transport node in the NSX
            system. All transport zones in such a nested NSX system will have
            the \"nested_nsx\" property being true so that all transport nodes
            will use this MAC for the VDR ports to avoid conflict with the VDR
            MAC in the outer NSX system. When the property
            \"allow_changing_vdr_mac_in_use\" is false, it can not be changed
            if the current VDR MAC is being used by any transport node in a
            nested NSX environment. A transport node uses this VDR MAC if any
            host switch in the node is in an OVERLAY transport zone whose
            \"nested_nsx\" property is true. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.allow_changing_vdr_mac_in_use = allow_changing_vdr_mac_in_use
        self.arp_limit_per_gateway = arp_limit_per_gateway
        self.external_gateway_bfd = external_gateway_bfd
        self.fips = fips
        self.global_replication_mode_enabled = global_replication_mode_enabled
        self.is_inherited = is_inherited
        self.l3_forwarding_mode = l3_forwarding_mode
        self.lb_ecmp = lb_ecmp
        self.mtu = mtu
        self.operation_collectors = operation_collectors
        self.physical_uplink_mtu = physical_uplink_mtu
        self.remote_tunnel_physical_mtu = remote_tunnel_physical_mtu
        self.site_infos = site_infos
        self.uplink_mtu_threshold = uplink_mtu_threshold
        self.vdr_mac = vdr_mac
        self.vdr_mac_nested = vdr_mac_nested
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_changing_vdr_mac_in_use': type.OptionalType(type.BooleanType()),
        'arp_limit_per_gateway': type.OptionalType(type.IntegerType()),
        'external_gateway_bfd': type.OptionalType(type.ReferenceType(__name__, 'ExternalGatewayBfdConfig')),
        'fips': type.OptionalType(type.ReferenceType(__name__, 'FIPSGlobalConfig')),
        'global_replication_mode_enabled': type.OptionalType(type.BooleanType()),
        'is_inherited': type.OptionalType(type.BooleanType()),
        'l3_forwarding_mode': type.OptionalType(type.StringType()),
        'lb_ecmp': type.OptionalType(type.BooleanType()),
        'mtu': type.OptionalType(type.IntegerType()),
        'operation_collectors': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'GlobalCollectorConfig')]))),
        'physical_uplink_mtu': type.OptionalType(type.IntegerType()),
        'remote_tunnel_physical_mtu': type.OptionalType(type.IntegerType()),
        'site_infos': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteInfo'))),
        'uplink_mtu_threshold': type.OptionalType(type.IntegerType()),
        'vdr_mac': type.OptionalType(type.StringType()),
        'vdr_mac_nested': type.OptionalType(type.StringType()),
    },
    GlobalConfig,
    False,
    None))



class GlobalDfwConfiguration(VapiStruct):
    """
    Global distributed firewall configuration for 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            '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=None,
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_firewall: :class:`bool` or ``None``
        :param enable_firewall: If set to true, distributed firewall is enabled on a specified
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enable_firewall = enable_firewall
        VapiStruct.__init__(self)


GlobalDfwConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_dfw_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_firewall': type.OptionalType(type.BooleanType()),
    },
    GlobalDfwConfiguration,
    False,
    None))



class GlobalDfwConfigurationListResult(VapiStruct):
    """
    Paged Collection of global distributed firewall configurations for all the
    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_: 
        :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:`GlobalDfwConfiguration` or ``None``
        :param results: Global distributed 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)


GlobalDfwConfigurationListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_dfw_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__, 'GlobalDfwConfiguration'))),
    },
    GlobalDfwConfigurationListResult,
    False,
    None))



class GlobalIdsSettings(VapiStruct):
    """
    Represents the Intrusion Detection System settings for NSX+.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'auto_update': 'auto_update',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 auto_update=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.auto_update = auto_update
        VapiStruct.__init__(self)


GlobalIdsSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    GlobalIdsSettings,
    False,
    None))



class GlobalIdsSignature(VapiStruct):
    """
    Global IDS signature.

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


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'enable': 'enable',
                            'signature_id': 'signature_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 enable=None,
                 signature_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`GlobalIdsSignature.ACTION_ALERT`
            * :attr:`GlobalIdsSignature.ACTION_DROP`
            * :attr:`GlobalIdsSignature.ACTION_REJECT`
            
            It denotes the global action of a IDS Signature. This will take
            precedence over IDS signature's action.
        :type  enable: :class:`bool` or ``None``
        :param enable: Flag through which user can Activate/Deactivate a Signature at
            Global Level.
        :type  signature_id: :class:`str` or ``None``
        :param signature_id: Represents the Signature's id.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.enable = enable
        self.signature_id = signature_id
        VapiStruct.__init__(self)


GlobalIdsSignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'enable': type.OptionalType(type.BooleanType()),
        'signature_id': type.OptionalType(type.StringType()),
    },
    GlobalIdsSignature,
    False,
    None))



class GlobalIdsSignatureListResult(VapiStruct):
    """
    Paged collection of Global 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_: 
        :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:`GlobalIdsSignature` or ``None``
        :param results: Global 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)


GlobalIdsSignatureListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_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__, 'GlobalIdsSignature'))),
    },
    GlobalIdsSignatureListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 GlobalManagerSwitchOverRequestParameter(VapiStruct):
    """
    Parameter to force switch over from Standby to Active.

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



    _canonical_to_pep_names = {
                            'force': 'force',
                            }

    def __init__(self,
                 force=None,
                ):
        """
        :type  force: :class:`bool` or ``None``
        :param force: If true indicates that user requested make standby Global Manager
            as active ignoring the state of current active Global Manager.
            Typically, recommended to use when active Global Manager is failed
            or not reachable.
        """
        self.force = force
        VapiStruct.__init__(self)


GlobalManagerSwitchOverRequestParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_manager_switch_over_request_parameter', {
        'force': type.OptionalType(type.BooleanType()),
    },
    GlobalManagerSwitchOverRequestParameter,
    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"
    """


    """
    X_VALUE_TYPE_STRING = "string"
    """


    """
    X_VALUE_TYPE_NUMBER = "number"
    """


    """
    X_VALUE_TYPE_DATE = "date"
    """


    """
    X_VALUE_TYPE_MILLISECOND = "millisecond"
    """


    """
    X_VALUE_TYPE_SECOND = "second"
    """


    """
    Y_VALUE_TYPE_INTEGER = "integer"
    """


    """
    Y_VALUE_TYPE_DOUBLE = "double"
    """


    """



    _canonical_to_pep_names = {
                            'axes': 'axes',
                            'display_x_value': 'displayx_value',
                            'graphs': 'graphs',
                            'graphs_colors': 'graphs_colors',
                            'line_chart_plot_configs': 'line_chart_plot_configs',
                            'navigation': 'navigation',
                            'sub_type': 'sub_type',
                            'x_value_type': 'x_value_type',
                            'y_value_type': 'y_value_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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 axes=None,
                 displayx_value=None,
                 graphs=None,
                 graphs_colors=None,
                 line_chart_plot_configs=None,
                 navigation=None,
                 sub_type=None,
                 x_value_type=None,
                 y_value_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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  axes: :class:`Axes` or ``None``
        :param axes: 
        :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  graphs_colors: :class:`list` of :class:`str` or ``None``
        :param graphs_colors: An array of graphs colors which will be applied to each graph
            seperately. if number of provided colors are smaller than number of
            graph in the widget then colors are applied in circular manner.
        :type  line_chart_plot_configs: :class:`list` of :class:`LineChartPlotConfiguration` or ``None``
        :param line_chart_plot_configs: List of line chart plotting configuration. This plotting
            configuration will be applicable for the LINE_GRAPH only.
        :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  x_value_type: :class:`str` or ``None``
        :param x_value_type: Possible values are: 
            
            * :attr:`GraphConfiguration.X_VALUE_TYPE_STRING`
            * :attr:`GraphConfiguration.X_VALUE_TYPE_NUMBER`
            * :attr:`GraphConfiguration.X_VALUE_TYPE_DATE`
            * :attr:`GraphConfiguration.X_VALUE_TYPE_MILLISECOND`
            * :attr:`GraphConfiguration.X_VALUE_TYPE_SECOND`
            
            x value type.
        :type  y_value_type: :class:`str` or ``None``
        :param y_value_type: Possible values are: 
            
            * :attr:`GraphConfiguration.Y_VALUE_TYPE_INTEGER`
            * :attr:`GraphConfiguration.Y_VALUE_TYPE_DOUBLE`
            
            y value 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        self.axes = axes
        self.displayx_value = displayx_value
        self.graphs = graphs
        self.graphs_colors = graphs_colors
        self.line_chart_plot_configs = line_chart_plot_configs
        self.navigation = navigation
        self.sub_type = sub_type
        self.x_value_type = x_value_type
        self.y_value_type = y_value_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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'graphs_colors': type.OptionalType(type.ListType(type.StringType())),
        'line_chart_plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LineChartPlotConfiguration'))),
        'navigation': type.OptionalType(type.StringType()),
        'sub_type': type.OptionalType(type.StringType()),
        'x_value_type': type.OptionalType(type.StringType()),
        'y_value_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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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 = {
                            'id': 'id',
                            'label': 'label',
                            'point_definition': 'point_definition',
                            'render_configuration': 'render_configuration',
                            'row_list_field': 'row_list_field',
                            }

    def __init__(self,
                 id=None,
                 label=None,
                 point_definition=None,
                 render_configuration=None,
                 row_list_field=None,
                ):
        """
        :type  id: :class:`str` or ``None``
        :param id: Identifier of graph. It can be used to differentiate multiple graph
            series present in GraphWidgetConfiguration.
        :type  label: :class:`Label` or ``None``
        :param label: 
        :type  point_definition: :class:`PointDefinition` or ``None``
        :param point_definition: 
        :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  row_list_field: :class:`str` or ``None``
        :param row_list_field: An expression that represents the series of the graph
        """
        self.id = id
        self.label = label
        self.point_definition = point_definition
        self.render_configuration = render_configuration
        self.row_list_field = row_list_field
        VapiStruct.__init__(self)


GraphDefinition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.graph_definition', {
        'id': type.OptionalType(type.StringType()),
        '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'))),
        'row_list_field': type.OptionalType(type.StringType()),
    },
    GraphDefinition,
    False,
    None))



class GreTunnel(VapiStruct):
    """
    GRE Tunnel

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GreTunnel"
    """
    Identifier denoting this class, when it is used 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 = {
                            'destination_address': 'destination_address',
                            'tunnel_keepalive': 'tunnel_keepalive',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': 'enabled',
                            'mtu': 'mtu',
                            'tunnel_address': 'tunnel_address',
                            }

    def __init__(self,
                 destination_address=None,
                 tunnel_keepalive=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='GreTunnel',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled=None,
                 mtu=None,
                 tunnel_address=None,
                ):
        """
        :type  destination_address: :class:`str` or ``None``
        :param destination_address: Destination IP address of P2P GRE Tunnel. The IP address that the
            NSX Edge will connect to. format: ipv4
        :type  tunnel_keepalive: :class:`TunnelKeepAlive` or ``None``
        :param tunnel_keepalive: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`Tunnel.RESOURCE_TYPE_GRETUNNEL`
            
            Indicates Resource type of tunnel, GreTunnel - Resource type as
            GreTunnel will be used to configure P2P GRE Tunnel.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 Tunnel
        :type  mtu: :class:`long` or ``None``
        :param mtu: Maximum transmission unit(MTU) in bytes specifies the size of the
            largest packet that a tunnel can transmit. format: int32
        :type  tunnel_address: :class:`list` of :class:`TunnelAddress` or ``None``
        :param tunnel_address: Specify list of IP address per every edge node for tunnel
            interface. Supports both IPv4 and IPv6 address.
        """
        self.destination_address = destination_address
        self.tunnel_keepalive = tunnel_keepalive
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        self.mtu = mtu
        self.tunnel_address = tunnel_address
        VapiStruct.__init__(self)

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

GreTunnel._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gre_tunnel', {
        'destination_address': type.OptionalType(type.StringType()),
        'tunnel_keepalive': type.OptionalType(type.ReferenceType(__name__, 'TunnelKeepAlive')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'mtu': type.OptionalType(type.IntegerType()),
        'tunnel_address': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TunnelAddress'))),
    },
    GreTunnel,
    False,
    None))



class GreTunnelAggregateTrafficStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GreTunnelAggregateTrafficStatistics"
    """
    Identifier denoting this class, when it is used 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 = {
                            'destination': 'destination',
                            'traffic_summary': 'traffic_summary',
                            'tunnel_policy_path': 'tunnel_policy_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 destination=None,
                 traffic_summary=None,
                 tunnel_policy_path=None,
                 resource_type='GreTunnelAggregateTrafficStatistics',
                ):
        """
        :type  destination: :class:`str` or ``None``
        :param destination: Tunnel destination 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  traffic_summary: :class:`LogicalRouterPortStatisticsSummary` or ``None``
        :param traffic_summary: 
        :type  tunnel_policy_path: :class:`str` or ``None``
        :param tunnel_policy_path: Policy path for the tunnel interface
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`AggregateTunnelTrafficStatistics.RESOURCE_TYPE_GRETUNNELAGGREGATETRAFFICSTATISTICS`
            
            GreTunnelAggregateTrafficStatistics - Resource type as
            GreTunnelAggregateTrafficStatistics will be used to populate P2P
            GRE Aggregate Tunnel traffic statistics
        """
        self.destination = destination
        self.traffic_summary = traffic_summary
        self.tunnel_policy_path = tunnel_policy_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

GreTunnelAggregateTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gre_tunnel_aggregate_traffic_statistics', {
        'destination': type.OptionalType(type.StringType()),
        'traffic_summary': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortStatisticsSummary')),
        'tunnel_policy_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    GreTunnelAggregateTrafficStatistics,
    False,
    None))



class GreTunnelEndpointStatusPerEdgeNode(VapiStruct):
    """


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


    """
    KEEPALIVE_ACK_DISABLE = "KEEPALIVE_ACK_DISABLE"
    """


    """
    KEEPALIVE_ADMIN_STATE_ENABLED = "ENABLED"
    """


    """
    KEEPALIVE_ADMIN_STATE_DISABLED = "DISABLED"
    """


    """
    KEEPALIVE_STATUS_ENABLE = "KEEPALIVE_STATUS_ENABLE"
    """


    """
    KEEPALIVE_STATUS_DISABLE = "KEEPALIVE_STATUS_DISABLE"
    """


    """
    RUNTIME_STATUS_UP = "UP"
    """


    """
    RUNTIME_STATUS_DOWN = "DOWN"
    """


    """



    _canonical_to_pep_names = {
                            'edge_path': 'edge_path',
                            'keepalive_ack': 'keepalive_ack',
                            'keepalive_ack_sent_count': 'keepalive_ack_sent_count',
                            'keepalive_admin_state': 'keepalive_admin_state',
                            'keepalive_dead_multiplier': 'keepalive_dead_multiplier',
                            'keepalive_interval': 'keepalive_interval',
                            'keepalive_last_ack_time': 'keepalive_last_ack_time',
                            'keepalive_last_rx_time': 'keepalive_last_rx_time',
                            'keepalive_last_tx_time': 'keepalive_last_tx_time',
                            'keepalive_rx_count': 'keepalive_rx_count',
                            'keepalive_status': 'keepalive_status',
                            'keepalive_tx_count': 'keepalive_tx_count',
                            'last_update_timestamp': 'last_update_timestamp',
                            'runtime_status': 'runtime_status',
                            'source': 'source',
                            'tunnel_down_count': 'tunnel_down_count',
                            'tunnel_last_down_time': 'tunnel_last_down_time',
                            'tunnel_last_up_time': 'tunnel_last_up_time',
                            'tunnel_port_id': 'tunnel_port_id',
                            'tunnel_up_count': 'tunnel_up_count',
                            }

    def __init__(self,
                 edge_path=None,
                 keepalive_ack=None,
                 keepalive_ack_sent_count=None,
                 keepalive_admin_state=None,
                 keepalive_dead_multiplier=None,
                 keepalive_interval=None,
                 keepalive_last_ack_time=None,
                 keepalive_last_rx_time=None,
                 keepalive_last_tx_time=None,
                 keepalive_rx_count=None,
                 keepalive_status=None,
                 keepalive_tx_count=None,
                 last_update_timestamp=None,
                 runtime_status=None,
                 source=None,
                 tunnel_down_count=None,
                 tunnel_last_down_time=None,
                 tunnel_last_up_time=None,
                 tunnel_port_id=None,
                 tunnel_up_count=None,
                ):
        """
        :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  keepalive_ack: :class:`str` or ``None``
        :param keepalive_ack: Possible values are: 
            
            * :attr:`GreTunnelEndpointStatusPerEdgeNode.KEEPALIVE_ACK_ENABLE`
            * :attr:`GreTunnelEndpointStatusPerEdgeNode.KEEPALIVE_ACK_DISABLE`
            
            The keepalive_ack indicates Tunnel keepalive ACK is
            administratively enabled or 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  keepalive_ack_sent_count: :class:`long` or ``None``
        :param keepalive_ack_sent_count: Total number of keepalive ack 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.
        :type  keepalive_admin_state: :class:`str` or ``None``
        :param keepalive_admin_state: Possible values are: 
            
            *
              :attr:`GreTunnelEndpointStatusPerEdgeNode.KEEPALIVE_ADMIN_STATE_ENABLED`
            *
              :attr:`GreTunnelEndpointStatusPerEdgeNode.KEEPALIVE_ADMIN_STATE_DISABLED`
            
            Tunnel Keepalive Admin 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  keepalive_dead_multiplier: :class:`long` or ``None``
        :param keepalive_dead_multiplier: Tunnel keepalive dead multiplier format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  keepalive_interval: :class:`long` or ``None``
        :param keepalive_interval: Tunnel keepalive interval in seconds format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  keepalive_last_ack_time: :class:`long` or ``None``
        :param keepalive_last_ack_time: Timestamp when the last keepalive ack 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  keepalive_last_rx_time: :class:`long` or ``None``
        :param keepalive_last_rx_time: Timestamp when the last keepalive 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  keepalive_last_tx_time: :class:`long` or ``None``
        :param keepalive_last_tx_time: Timestamp when the last keepalive 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  keepalive_rx_count: :class:`long` or ``None``
        :param keepalive_rx_count: Total number of keepalive 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  keepalive_status: :class:`str` or ``None``
        :param keepalive_status: Possible values are: 
            
            *
              :attr:`GreTunnelEndpointStatusPerEdgeNode.KEEPALIVE_STATUS_ENABLE`
            *
              :attr:`GreTunnelEndpointStatusPerEdgeNode.KEEPALIVE_STATUS_DISABLE`
            
            The keepalive_status indicates Tunnel keepalive is administratively
            enabled or 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  keepalive_tx_count: :class:`long` or ``None``
        :param keepalive_tx_count: Total number of keepalive 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.
        :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  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values are: 
            
            * :attr:`GreTunnelEndpointStatusPerEdgeNode.RUNTIME_STATUS_UP`
            * :attr:`GreTunnelEndpointStatusPerEdgeNode.RUNTIME_STATUS_DOWN`
            
            Tunnel run time 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  source: :class:`str` or ``None``
        :param source: Tunnel 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  tunnel_down_count: :class:`long` or ``None``
        :param tunnel_down_count: Count of Tunnel run time status 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  tunnel_last_down_time: :class:`long` or ``None``
        :param tunnel_last_down_time: Timestamp when the tunnel status was last updated 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  tunnel_last_up_time: :class:`long` or ``None``
        :param tunnel_last_up_time: Timestamp when the tunnel status was last updated as \"UP\" format:
            int64
            This 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_port_id: :class:`str` or ``None``
        :param tunnel_port_id: ID of the tunnel router 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  tunnel_up_count: :class:`long` or ``None``
        :param tunnel_up_count: Count of Tunnel run time status as \"UP\" format: int64
            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_path = edge_path
        self.keepalive_ack = keepalive_ack
        self.keepalive_ack_sent_count = keepalive_ack_sent_count
        self.keepalive_admin_state = keepalive_admin_state
        self.keepalive_dead_multiplier = keepalive_dead_multiplier
        self.keepalive_interval = keepalive_interval
        self.keepalive_last_ack_time = keepalive_last_ack_time
        self.keepalive_last_rx_time = keepalive_last_rx_time
        self.keepalive_last_tx_time = keepalive_last_tx_time
        self.keepalive_rx_count = keepalive_rx_count
        self.keepalive_status = keepalive_status
        self.keepalive_tx_count = keepalive_tx_count
        self.last_update_timestamp = last_update_timestamp
        self.runtime_status = runtime_status
        self.source = source
        self.tunnel_down_count = tunnel_down_count
        self.tunnel_last_down_time = tunnel_last_down_time
        self.tunnel_last_up_time = tunnel_last_up_time
        self.tunnel_port_id = tunnel_port_id
        self.tunnel_up_count = tunnel_up_count
        VapiStruct.__init__(self)


GreTunnelEndpointStatusPerEdgeNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gre_tunnel_endpoint_status_per_edge_node', {
        'edge_path': type.OptionalType(type.StringType()),
        'keepalive_ack': type.OptionalType(type.StringType()),
        'keepalive_ack_sent_count': type.OptionalType(type.IntegerType()),
        'keepalive_admin_state': type.OptionalType(type.StringType()),
        'keepalive_dead_multiplier': type.OptionalType(type.IntegerType()),
        'keepalive_interval': type.OptionalType(type.IntegerType()),
        'keepalive_last_ack_time': type.OptionalType(type.IntegerType()),
        'keepalive_last_rx_time': type.OptionalType(type.IntegerType()),
        'keepalive_last_tx_time': type.OptionalType(type.IntegerType()),
        'keepalive_rx_count': type.OptionalType(type.IntegerType()),
        'keepalive_status': type.OptionalType(type.StringType()),
        'keepalive_tx_count': type.OptionalType(type.IntegerType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.StringType()),
        'tunnel_down_count': type.OptionalType(type.IntegerType()),
        'tunnel_last_down_time': type.OptionalType(type.IntegerType()),
        'tunnel_last_up_time': type.OptionalType(type.IntegerType()),
        'tunnel_port_id': type.OptionalType(type.StringType()),
        'tunnel_up_count': type.OptionalType(type.IntegerType()),
    },
    GreTunnelEndpointStatusPerEdgeNode,
    False,
    None))



class GreTunnelStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GreTunnelStatus"
    """
    Identifier denoting this class, when it is used 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 = {
                            'destination': 'destination',
                            'endpoint_status_per_edge_node': 'endpoint_status_per_edge_node',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 destination=None,
                 endpoint_status_per_edge_node=None,
                 resource_type='GreTunnelStatus',
                ):
        """
        :type  destination: :class:`str` or ``None``
        :param destination: Tunnel destination 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  endpoint_status_per_edge_node: :class:`list` of :class:`GreTunnelEndpointStatusPerEdgeNode` or ``None``
        :param endpoint_status_per_edge_node: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`TunnelStatus.RESOURCE_TYPE_GRETUNNELSTATUS`
            
            Indicates Resource type of TunnelStatus, GreTunnelStatus - Resource
            type as GreTunnelStatus will be used to populate P2P GRE Tunnel
            status
        """
        self.destination = destination
        self.endpoint_status_per_edge_node = endpoint_status_per_edge_node
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

GreTunnelStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gre_tunnel_status', {
        'destination': type.OptionalType(type.StringType()),
        'endpoint_status_per_edge_node': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GreTunnelEndpointStatusPerEdgeNode'))),
        'resource_type': type.StringType(),
    },
    GreTunnelStatus,
    False,
    None))



class GreTunnelTrafficStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GreTunnelTrafficStatistics"
    """
    Identifier denoting this class, when it is used 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 = {
                            'destination': 'destination',
                            'per_edge_node_statistics': 'per_edge_node_statistics',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 destination=None,
                 per_edge_node_statistics=None,
                 resource_type='GreTunnelTrafficStatistics',
                ):
        """
        :type  destination: :class:`str` or ``None``
        :param destination: GreTunnelTrafficStatistics - Resource type as
            GreTunnelTrafficStatistics will be used to populate P2P GRE Tunnel
            traffic statistics 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  per_edge_node_statistics: :class:`list` of :class:`TunnelPortStatisticsPerNode` or ``None``
        :param per_edge_node_statistics: Set of Tunnel statistics 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  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TunnelTrafficStatistics.RESOURCE_TYPE_GRETUNNELTRAFFICSTATISTICS`
            
            GreTunnelTrafficStatistics - Resource type as
            GreTunnelTrafficStatistics will be used to populate P2P GRE Tunnel
            traffic statistics
        """
        self.destination = destination
        self.per_edge_node_statistics = per_edge_node_statistics
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

GreTunnelTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gre_tunnel_traffic_statistics', {
        'destination': type.OptionalType(type.StringType()),
        'per_edge_node_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TunnelPortStatisticsPerNode'))),
        'resource_type': type.StringType(),
    },
    GreTunnelTrafficStatistics,
    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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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.
    """
    GROUP_TYPE_IPADDRESS = "IPAddress"
    """


    """
    GROUP_TYPE_ANTREA = "ANTREA"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'expression': 'expression',
                            'extended_expression': 'extended_expression',
                            'group_type': 'group_type',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 expression=None,
                 extended_expression=None,
                 group_type=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  group_type: :class:`list` of :class:`str` or ``None``
        :param group_type: Possible values are: 
            
            * :attr:`Group.GROUP_TYPE_IPADDRESS`
            * :attr:`Group.GROUP_TYPE_ANTREA`
            
            Group type can be specified during create and update of a group.
            Empty group type indicates a 'generic' group, ie group can include
            any entity from the valid GroupMemberType.
        :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
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.group_type = group_type
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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')]))),
        'group_type': type.OptionalType(type.ListType(type.StringType())),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 GroupDiscoveryProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Group 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_',
                            '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_: 
        :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:`GroupDiscoveryProfileBindingMap` or ``None``
        :param results: Group 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)


GroupDiscoveryProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_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__, 'GroupDiscoveryProfileBindingMap'))),
    },
    GroupDiscoveryProfileBindingMapListResult,
    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: 
        :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_: 
        :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"
    """


    """
    RESULTS_POD = "Pod"
    """


    """
    RESULTS_SERVICE = "Service"
    """


    """
    RESULTS_NAMESPACE = "Namespace"
    """


    """
    RESULTS_CLUSTER = "Cluster"
    """


    """
    RESULTS_TRANSPORTNODE = "TransportNode"
    """


    """
    RESULTS_GROUP = "Group"
    """


    """
    RESULTS_DVPG = "DVPG"
    """


    """
    RESULTS_DVPORT = "DVPort"
    """


    """
    RESULTS_KUBERNETESCLUSTER = "KubernetesCluster"
    """


    """
    RESULTS_KUBERNETESNAMESPACE = "KubernetesNamespace"
    """


    """
    RESULTS_ANTREAEGRESS = "AntreaEgress"
    """


    """
    RESULTS_ANTREAIPPOOL = "AntreaIPPool"
    """


    """
    RESULTS_KUBERNETESINGRESS = "KubernetesIngress"
    """


    """
    RESULTS_KUBERNETESGATEWAY = "KubernetesGateway"
    """


    """
    RESULTS_KUBERNETESSERVICE = "KubernetesService"
    """


    """
    RESULTS_KUBERNETESNODE = "KubernetesNode"
    """


    """
    RESULTS_VPCSUBNET = "VpcSubnet"
    """


    """
    RESULTS_VPCSUBNETPORT = "VpcSubnetPort"
    """


    """



    _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`
            * :attr:`GroupMemberTypeListResult.RESULTS_POD`
            * :attr:`GroupMemberTypeListResult.RESULTS_SERVICE`
            * :attr:`GroupMemberTypeListResult.RESULTS_NAMESPACE`
            * :attr:`GroupMemberTypeListResult.RESULTS_CLUSTER`
            * :attr:`GroupMemberTypeListResult.RESULTS_TRANSPORTNODE`
            * :attr:`GroupMemberTypeListResult.RESULTS_GROUP`
            * :attr:`GroupMemberTypeListResult.RESULTS_DVPG`
            * :attr:`GroupMemberTypeListResult.RESULTS_DVPORT`
            * :attr:`GroupMemberTypeListResult.RESULTS_KUBERNETESCLUSTER`
            * :attr:`GroupMemberTypeListResult.RESULTS_KUBERNETESNAMESPACE`
            * :attr:`GroupMemberTypeListResult.RESULTS_ANTREAEGRESS`
            * :attr:`GroupMemberTypeListResult.RESULTS_ANTREAIPPOOL`
            * :attr:`GroupMemberTypeListResult.RESULTS_KUBERNETESINGRESS`
            * :attr:`GroupMemberTypeListResult.RESULTS_KUBERNETESGATEWAY`
            * :attr:`GroupMemberTypeListResult.RESULTS_KUBERNETESSERVICE`
            * :attr:`GroupMemberTypeListResult.RESULTS_KUBERNETESNODE`
            * :attr:`GroupMemberTypeListResult.RESULTS_VPCSUBNET`
            * :attr:`GroupMemberTypeListResult.RESULTS_VPCSUBNETPORT`
            
            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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 GroupScopeExpression(VapiStruct):
    """
    Represents scope of the workloads that needs to be added to the Group.

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

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

    """
    SCOPE_TYPE_PROJECT = "PROJECT"
    """


    """
    SCOPE_TYPE_VPC = "VPC"
    """


    """



    _canonical_to_pep_names = {
                            'scope_path': 'scope_path',
                            'scope_type': 'scope_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 scope_path=None,
                 scope_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='GroupScopeExpression',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  scope_path: :class:`str` or ``None``
        :param scope_path: Path of the scope
        :type  scope_type: :class:`str` or ``None``
        :param scope_type: Possible values are: 
            
            * :attr:`GroupScopeExpression.SCOPE_TYPE_PROJECT`
            * :attr:`GroupScopeExpression.SCOPE_TYPE_VPC`
            
            Scope 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.scope_path = scope_path
        self.scope_type = scope_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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

GroupScopeExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_scope_expression', {
        'scope_path': type.OptionalType(type.StringType()),
        'scope_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    GroupScopeExpression,
    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_header_widgets': 'sub_header_widgets',
                            'sub_headers': 'sub_headers',
                            }

    def __init__(self,
                 condition=None,
                 content_alignment=None,
                 sub_header_widgets=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_header_widgets: :class:`list` of :class:`WidgetItem` or ``None``
        :param sub_header_widgets: An array of widgets which will appear inside the container header
            Instead of 'sub_headers' property use this property.
        :type  sub_headers: :class:`list` of :class:`PropertyItem` or ``None``
        :param sub_headers: An array of label-value properties. This field is deprecated
            instead used 'sub_header_widgets' property to define header
            widgets.

            .. deprecated:: unknown
        """
        self.condition = condition
        self.content_alignment = content_alignment
        self.sub_header_widgets = sub_header_widgets
        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_header_widgets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetItem'))),
        'sub_headers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PropertyItem'))),
    },
    Header,
    False,
    None))



class HeatMapTransportNodesAggregateStatus(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'degraded_count': 'degraded_count',
                            'down_count': 'down_count',
                            'unknown_count': 'unknown_count',
                            'up_count': 'up_count',
                            }

    def __init__(self,
                 degraded_count=None,
                 down_count=None,
                 unknown_count=None,
                 up_count=None,
                ):
        """
        :type  degraded_count: :class:`long` or ``None``
        :param degraded_count: Number of transport nodes that are degraded format: int32
        :type  down_count: :class:`long` or ``None``
        :param down_count: Number of transport nodes that are down format: int32
        :type  unknown_count: :class:`long` or ``None``
        :param unknown_count: Number of transport nodes with unknown status format: int32
        :type  up_count: :class:`long` or ``None``
        :param up_count: Number of transport nodes that are up format: int32
        """
        self.degraded_count = degraded_count
        self.down_count = down_count
        self.unknown_count = unknown_count
        self.up_count = up_count
        VapiStruct.__init__(self)


HeatMapTransportNodesAggregateStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.heat_map_transport_nodes_aggregate_status', {
        'degraded_count': type.OptionalType(type.IntegerType()),
        'down_count': type.OptionalType(type.IntegerType()),
        'unknown_count': type.OptionalType(type.IntegerType()),
        'up_count': type.OptionalType(type.IntegerType()),
    },
    HeatMapTransportNodesAggregateStatus,
    False,
    None))



class HeatMapTransportZoneStatus(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'degraded_count': 'degraded_count',
                            'down_count': 'down_count',
                            'unknown_count': 'unknown_count',
                            'up_count': 'up_count',
                            }

    def __init__(self,
                 degraded_count=None,
                 down_count=None,
                 unknown_count=None,
                 up_count=None,
                ):
        """
        :type  degraded_count: :class:`long` or ``None``
        :param degraded_count: Number of transport nodes that are degraded format: int32
        :type  down_count: :class:`long` or ``None``
        :param down_count: Number of transport nodes that are down format: int32
        :type  unknown_count: :class:`long` or ``None``
        :param unknown_count: Number of transport nodes with unknown status format: int32
        :type  up_count: :class:`long` or ``None``
        :param up_count: Number of transport nodes that are up format: int32
        """
        self.degraded_count = degraded_count
        self.down_count = down_count
        self.unknown_count = unknown_count
        self.up_count = up_count
        VapiStruct.__init__(self)


HeatMapTransportZoneStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.heat_map_transport_zone_status', {
        'degraded_count': type.OptionalType(type.IntegerType()),
        'down_count': type.OptionalType(type.IntegerType()),
        'unknown_count': type.OptionalType(type.IntegerType()),
        'up_count': type.OptionalType(type.IntegerType()),
    },
    HeatMapTransportZoneStatus,
    False,
    None))



class HighPerformanceConfig(VapiStruct):
    """
    Configuration supported to configure high performance.

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

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

    """
    HIGH_PERFORMANCE_CONFIG_TYPE_ADV_CONFIG = "ADV_CONFIG"
    """


    """
    HIGH_PERFORMANCE_CONFIG_TYPE_DRIVER_CONFIG = "DRIVER_CONFIG"
    """


    """
    HIGH_PERFORMANCE_CONFIG_TYPE_MISC_CONFIG = "MISC_CONFIG"
    """


    """



    _canonical_to_pep_names = {
                            'high_performance_config_params': 'high_performance_config_params',
                            'high_performance_config_type': 'high_performance_config_type',
                            'version': 'version',
                            }

    def __init__(self,
                 high_performance_config_params=None,
                 high_performance_config_type='HighPerformanceConfig',
                 version=None,
                ):
        """
        :type  high_performance_config_params: :class:`list` of :class:`HighPerformanceConfigParams` or ``None``
        :param high_performance_config_params: List of parameters that could be used to configure high
            performance.
        :type  high_performance_config_type: :class:`str`
        :param high_performance_config_type: Possible values are: 
            
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_ADV_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_DRIVER_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_MISC_CONFIG`
            
            The specific type of config.
        :type  version: :class:`list` of :class:`str` or ``None``
        :param version: Based on the high_performance_config_type, it could be either
            driver version or host version. For high_performance_config_type as
            ADV_CONFIG or MISC_CONFIG, this represents host version. For
            high_performance_config_type as DRIVER_CONFIG, this represents
            physical NIC driver version.
        """
        self.high_performance_config_params = high_performance_config_params
        self._high_performance_config_type = high_performance_config_type
        self.version = version
        VapiStruct.__init__(self)

    @property
    def high_performance_config_type(self):
        """
        Return the discriminator value
        """
        return self._high_performance_config_type

HighPerformanceConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.high_performance_config', {
        'high_performance_config_params': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HighPerformanceConfigParams'))),
        'high_performance_config_type': type.StringType(),
        'version': type.OptionalType(type.ListType(type.StringType())),
    },
    HighPerformanceConfig,
    False,
    None))



class HighPerformanceConfigParams(VapiStruct):
    """
    Configuration parameters required to configure high performance.

    .. 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 used to configure high performance.
        :type  value: :class:`str` or ``None``
        :param value: Value corresponding to the key.
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


HighPerformanceConfigParams._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.high_performance_config_params', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    HighPerformanceConfigParams,
    False,
    None))



class HostInfraTrafficType(VapiStruct):
    """
    The traffic_name specifies the infrastructure traffic type and it must be
    one of the following system-defined types: FAULT_TOLERANCE is traffic for
    failover and recovery. HBR is traffic for Host based replication. ISCSI is
    traffic for Internet Small Computer System Interface. MANAGEMENT is traffic
    for host management. NFS is traffic related to file transfer in network
    file system. VDP is traffic for vSphere data protection. VIRTUAL_MACHINE is
    traffic generated by virtual machines. VMOTION is traffic for computing
    resource migration. VSAN is traffic generated by virtual storage area
    network. The dynamic_res_pool_name provides a name for the resource pool.
    It can be any arbitrary string. Either traffic_name or
    dynamic_res_pool_name must be set. If both are specified or omitted, an
    error will be returned.

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


    """
    TRAFFIC_NAME_HBR = "HBR"
    """


    """
    TRAFFIC_NAME_ISCSI = "ISCSI"
    """


    """
    TRAFFIC_NAME_MANAGEMENT = "MANAGEMENT"
    """


    """
    TRAFFIC_NAME_NFS = "NFS"
    """


    """
    TRAFFIC_NAME_VDP = "VDP"
    """


    """
    TRAFFIC_NAME_VIRTUAL_MACHINE = "VIRTUAL_MACHINE"
    """


    """
    TRAFFIC_NAME_VMOTION = "VMOTION"
    """


    """
    TRAFFIC_NAME_VSAN = "VSAN"
    """


    """



    _canonical_to_pep_names = {
                            'dynamic_res_pool_name': 'dynamic_res_pool_name',
                            'traffic_name': 'traffic_name',
                            }

    def __init__(self,
                 dynamic_res_pool_name=None,
                 traffic_name=None,
                ):
        """
        :type  dynamic_res_pool_name: :class:`str` or ``None``
        :param dynamic_res_pool_name: Dynamic resource pool traffic name
        :type  traffic_name: :class:`str` or ``None``
        :param traffic_name: Possible values are: 
            
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_FAULT_TOLERANCE`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_HBR`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_ISCSI`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_MANAGEMENT`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_NFS`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_VDP`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_VIRTUAL_MACHINE`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_VMOTION`
            * :attr:`HostInfraTrafficType.TRAFFIC_NAME_VSAN`
            
            Traffic types
        """
        self.dynamic_res_pool_name = dynamic_res_pool_name
        self.traffic_name = traffic_name
        VapiStruct.__init__(self)


HostInfraTrafficType._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_infra_traffic_type', {
        'dynamic_res_pool_name': type.OptionalType(type.StringType()),
        'traffic_name': type.OptionalType(type.StringType()),
    },
    HostInfraTrafficType,
    False,
    None))



class HostMovementSpec(VapiStruct):
    """
    Fields required for host movement across sub-clusters

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



    _canonical_to_pep_names = {
                            'destination': 'destination',
                            'discovered_node_ids': 'discovered_node_ids',
                            'source': 'source',
                            }

    def __init__(self,
                 destination=None,
                 discovered_node_ids=None,
                 source=None,
                ):
        """
        :type  destination: :class:`str` or ``None``
        :param destination: This is the policy path of destination sub-cluster to which hosts
            will be moved to. If this value is null, then we assume the host is
            moved into the cluster.
        :type  discovered_node_ids: :class:`list` of :class:`str` or ``None``
        :param discovered_node_ids: Discovered node IDs to be moved.
        :type  source: :class:`str` or ``None``
        :param source: This is the policy path of source sub-cluster from which hosts are
            moved out
        """
        self.destination = destination
        self.discovered_node_ids = discovered_node_ids
        self.source = source
        VapiStruct.__init__(self)


HostMovementSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_movement_spec', {
        'destination': type.OptionalType(type.StringType()),
        'discovered_node_ids': type.OptionalType(type.ListType(type.StringType())),
        'source': type.OptionalType(type.StringType()),
    },
    HostMovementSpec,
    False,
    None))



class HostNodeLoginCredential(VapiStruct):
    """
    The credentials to login into the host node

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



    _canonical_to_pep_names = {
                            'password': 'password',
                            'thumbprint': 'thumbprint',
                            'username': 'username',
                            }

    def __init__(self,
                 password=None,
                 thumbprint=None,
                 username=None,
                ):
        """
        :type  password: :class:`str` or ``None``
        :param password: The authentication password of the host node
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: For ESXi hosts, the thumbprint of the ESXi management service. For
            KVM hosts, the SSH key fingerprint. If thumbprint is not provided
            then connection to host may not be established and API call will
            fail.
        :type  username: :class:`str` or ``None``
        :param username: The username of the account on the host node
        """
        self.password = password
        self.thumbprint = thumbprint
        self.username = username
        VapiStruct.__init__(self)


HostNodeLoginCredential._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_node_login_credential', {
        'password': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    HostNodeLoginCredential,
    False,
    None))



class HostSwitchConfigOption(VapiStruct):
    """
    Host Switch configuration option specification

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



    _canonical_to_pep_names = {
                            'host_switch_id': 'host_switch_id',
                            'host_switch_profile_ids': 'host_switch_profile_ids',
                            'ip_assignment_spec': 'ip_assignment_spec',
                            'ipv6_assignment_spec': 'ipv6_assignment_spec',
                            'uplinks': 'uplinks',
                            }

    def __init__(self,
                 host_switch_id=None,
                 host_switch_profile_ids=None,
                 ip_assignment_spec=None,
                 ipv6_assignment_spec=None,
                 uplinks=None,
                ):
        """
        :type  host_switch_id: :class:`str` or ``None``
        :param host_switch_id: This field is writable only in case of VDS type HostSwitch and
            system generated for NVDS type. For VDS type host switch, This
            field is used to lookup a VDS from corresponding Compute Manager
            and then can be configured for logical networking. For NVDS type
            host switch, This field is system generated and if provided will be
            overwritten.
        :type  host_switch_profile_ids: :class:`list` of :class:`HostSwitchProfileTypeIdEntry` or ``None``
        :param host_switch_profile_ids: Host switch profiles bound to this host switch. If a profile ID is
            not provided for any HostSwitchProfileType that is supported by the
            transport node, the corresponding default profile will be bound to
            the host switch. If transport node is created using Policy APIs,
            use policyPaths instead of UUIDs.
        :type  ip_assignment_spec: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ip_assignment_spec: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IpAssignmentSpec`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`IpAssignmentSpec`.
        :type  ipv6_assignment_spec: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ipv6_assignment_spec: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Ipv6AssignmentSpec`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`Ipv6AssignmentSpec`.
        :type  uplinks: :class:`list` of :class:`VdsUplink` or ``None``
        :param uplinks: If VDS is used as a HostSwitch this attribute must be specified.
            You can associate uplinks from UplinkHostSwitchProfile to either
            VDS uplink or LAG. VDS uplink or LAG will inherit the global VDS
            level teaming policy from vSphere. NSX managed uplink or LAG will
            have NSX teaming policy configured through UplinkHostSwitchProfile.
        """
        self.host_switch_id = host_switch_id
        self.host_switch_profile_ids = host_switch_profile_ids
        self.ip_assignment_spec = ip_assignment_spec
        self.ipv6_assignment_spec = ipv6_assignment_spec
        self.uplinks = uplinks
        VapiStruct.__init__(self)


HostSwitchConfigOption._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_switch_config_option', {
        'host_switch_id': type.OptionalType(type.StringType()),
        'host_switch_profile_ids': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HostSwitchProfileTypeIdEntry'))),
        'ip_assignment_spec': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IpAssignmentSpec')])),
        'ipv6_assignment_spec': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Ipv6AssignmentSpec')])),
        'uplinks': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VdsUplink'))),
    },
    HostSwitchConfigOption,
    False,
    None))



class HostSwitchConfigSource(VapiStruct):
    """
    This object contains references to transport node profile sub
    configurations that will be used to generate overridden host switch
    configuration.Such overridden configuration can be applied to a sub-cluster
    defined within vSphere managed cluster.

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



    _canonical_to_pep_names = {
                            'host_switch_id': 'host_switch_id',
                            'transport_node_profile_sub_config_name': 'transport_node_profile_sub_config_name',
                            }

    def __init__(self,
                 host_switch_id=None,
                 transport_node_profile_sub_config_name=None,
                ):
        """
        :type  host_switch_id: :class:`str` or ``None``
        :param host_switch_id: HostSwitch Id
        :type  transport_node_profile_sub_config_name: :class:`str` or ``None``
        :param transport_node_profile_sub_config_name: Name of the TransportNodeProfile sub configuration to be used.
        """
        self.host_switch_id = host_switch_id
        self.transport_node_profile_sub_config_name = transport_node_profile_sub_config_name
        VapiStruct.__init__(self)


HostSwitchConfigSource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_switch_config_source', {
        'host_switch_id': type.OptionalType(type.StringType()),
        'transport_node_profile_sub_config_name': type.OptionalType(type.StringType()),
    },
    HostSwitchConfigSource,
    False,
    None))



class HostSwitchProfileTypeIdEntry(VapiStruct):
    """


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


    """
    KEY_LLDPHOSTSWITCHPROFILE = "LldpHostSwitchProfile"
    """


    """
    KEY_NIOCPROFILE = "NiocProfile"
    """


    """
    KEY_EXTRACONFIGHOSTSWITCHPROFILE = "ExtraConfigHostSwitchProfile"
    """


    """
    KEY_VTEPHAHOSTSWITCHPROFILE = "VtepHAHostSwitchProfile"
    """


    """
    KEY_HIGHPERFORMANCEHOSTSWITCHPROFILE = "HighPerformanceHostSwitchProfile"
    """


    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'value': 'value',
                            }

    def __init__(self,
                 key=None,
                 value=None,
                ):
        """
        :type  key: :class:`str` or ``None``
        :param key: Possible values are: 
            
            * :attr:`HostSwitchProfileTypeIdEntry.KEY_UPLINKHOSTSWITCHPROFILE`
            * :attr:`HostSwitchProfileTypeIdEntry.KEY_LLDPHOSTSWITCHPROFILE`
            * :attr:`HostSwitchProfileTypeIdEntry.KEY_NIOCPROFILE`
            *
              :attr:`HostSwitchProfileTypeIdEntry.KEY_EXTRACONFIGHOSTSWITCHPROFILE`
            * :attr:`HostSwitchProfileTypeIdEntry.KEY_VTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`HostSwitchProfileTypeIdEntry.KEY_HIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  value: :class:`str` or ``None``
        :param value: key value
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


HostSwitchProfileTypeIdEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_switch_profile_type_id_entry', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    HostSwitchProfileTypeIdEntry,
    False,
    None))



class HostSwitchSpec(VapiStruct):
    """
    The HostSwitchSpec is the base class for standard and preconfigured host
    switch specifications.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "HostSwitchSpec"
    """
    Identifier denoting this class, when it is used 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_STANDARDHOSTSWITCHSPEC = "StandardHostSwitchSpec"
    """


    """
    RESOURCE_TYPE_PRECONFIGUREDHOSTSWITCHSPEC = "PreconfiguredHostSwitchSpec"
    """


    """



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

    def __init__(self,
                 resource_type='HostSwitchSpec',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`HostSwitchSpec.RESOURCE_TYPE_STANDARDHOSTSWITCHSPEC`
            * :attr:`HostSwitchSpec.RESOURCE_TYPE_PRECONFIGUREDHOSTSWITCHSPEC`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class HostSwitchState(VapiStruct):
    """
    Host Switch State

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


    """
    HOST_SWITCH_TYPE_VDS = "VDS"
    """


    """



    _canonical_to_pep_names = {
                            'endpoints': 'endpoints',
                            'host_switch_id': 'host_switch_id',
                            'host_switch_name': 'host_switch_name',
                            'host_switch_type': 'host_switch_type',
                            'transport_zone_ids': 'transport_zone_ids',
                            }

    def __init__(self,
                 endpoints=None,
                 host_switch_id=None,
                 host_switch_name=None,
                 host_switch_type=None,
                 transport_zone_ids=None,
                ):
        """
        :type  endpoints: :class:`list` of :class:`Endpoint` or ``None``
        :param endpoints: List of virtual tunnel endpoints which are configured on 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  host_switch_id: :class:`str` or ``None``
        :param host_switch_id: External ID of the HostSwitch
            This 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_switch_name: :class:`str` or ``None``
        :param host_switch_name: The name must be unique among all host switches specified in a
            given 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  host_switch_type: :class:`str` or ``None``
        :param host_switch_type: Possible values are: 
            
            * :attr:`HostSwitchState.HOST_SWITCH_TYPE_NVDS`
            * :attr:`HostSwitchState.HOST_SWITCH_TYPE_VDS`
            
            VDS represents VMware vSphere Distributed Switch from vSphere that
            is used as HostSwitch through TransportNode or TransportNodeProfile
            configuration. When VDS is used as a HostSwitch, Hosts have to be
            added to VDS from vSphere and VDS instance is created on Hosts. To
            configure NSX on such hosts, you can use this VDS as a HostSwitch
            from NSX manager. vCenter has the ownership of MTU, LAG, NIOC and
            LLDP configuration of such VDS backed HostSwitch. Remaining
            configuration (e.g. UplinkHostswitchProfile) will be managed by
            NSX. NVDS represents NSX Virtual Switch which is NSX native
            HostSwitch. All configurations of NVDS will be managed by NSX.
        :type  transport_zone_ids: :class:`list` of :class:`str` or ``None``
        :param transport_zone_ids: List of Ids of TransportZones this HostSwitch 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.
        """
        self.endpoints = endpoints
        self.host_switch_id = host_switch_id
        self.host_switch_name = host_switch_name
        self.host_switch_type = host_switch_type
        self.transport_zone_ids = transport_zone_ids
        VapiStruct.__init__(self)


HostSwitchState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_switch_state', {
        'endpoints': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Endpoint'))),
        'host_switch_id': type.OptionalType(type.StringType()),
        'host_switch_name': type.OptionalType(type.StringType()),
        'host_switch_type': type.OptionalType(type.StringType()),
        'transport_zone_ids': type.OptionalType(type.ListType(type.StringType())),
    },
    HostSwitchState,
    False,
    None))



class HostTransportNode(VapiStruct):
    """
    Host Transport Node

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


    """
    MAINTENANCE_MODE_FORCE_ENABLED = "FORCE_ENABLED"
    """


    """
    MAINTENANCE_MODE_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'discovered_node_id_for_create': 'discovered_node_id_for_create',
                            'host_switch_spec': 'host_switch_spec',
                            'is_overridden': 'is_overridden',
                            'maintenance_mode': 'maintenance_mode',
                            'node_deployment_info': 'node_deployment_info',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 discovered_node_id_for_create=None,
                 host_switch_spec=None,
                 is_overridden=None,
                 maintenance_mode=None,
                 node_deployment_info=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  discovered_node_id_for_create: :class:`str` or ``None``
        :param discovered_node_id_for_create: Specify discovered node id to create Host Transport Node for
            Discovered Node. This field is required during Host Transport Node
            create from vCenter server managing the ESXi type HostNode. No need
            to provide node_deployment_info while creating Host Transport Node
            for Discovered Node. If both node_deployment_info and
            discovered_node_id_for_create provided during Host TransportNode
            create payload then it will create Host Transport Node from the
            discovered node id provided in this field.
        :type  host_switch_spec: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param host_switch_spec: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`HostSwitchSpec`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`HostSwitchSpec`.
        :type  is_overridden: :class:`bool` or ``None``
        :param is_overridden: This flag is relevant to only those hosts which are part of a
            compute collection which has transport node profile (TNP) applied
            on it. If through any update, the transport node configuration is
            found to be different than TNP configuration, then this field is
            set to true. If through any update, the transport node
            configuration is found to be same as TNP configuration, then this
            field is set to false. Updates here include all kinds of updates to
            the TNP, updates to transport node collection (TNC) or updates to
            transport node (TN)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  maintenance_mode: :class:`str` or ``None``
        :param maintenance_mode: Possible values are: 
            
            * :attr:`HostTransportNode.MAINTENANCE_MODE_ENABLED`
            * :attr:`HostTransportNode.MAINTENANCE_MODE_FORCE_ENABLED`
            * :attr:`HostTransportNode.MAINTENANCE_MODE_DISABLED`
            
            The property is read-only, used for querying result. User could
            update transport node maintenance mode by
            UpdateTransportNodeMaintenanceMode call.
            This 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_deployment_info: :class:`FabricHostNode` or ``None``
        :param node_deployment_info: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.discovered_node_id_for_create = discovered_node_id_for_create
        self.host_switch_spec = host_switch_spec
        self.is_overridden = is_overridden
        self.maintenance_mode = maintenance_mode
        self.node_deployment_info = node_deployment_info
        VapiStruct.__init__(self)


HostTransportNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_transport_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'discovered_node_id_for_create': type.OptionalType(type.StringType()),
        'host_switch_spec': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'HostSwitchSpec')])),
        'is_overridden': type.OptionalType(type.BooleanType()),
        'maintenance_mode': type.OptionalType(type.StringType()),
        'node_deployment_info': type.OptionalType(type.ReferenceType(__name__, 'FabricHostNode')),
    },
    HostTransportNode,
    False,
    None))



class HostTransportNodeCollection(VapiStruct):
    """
    Entity to indicate relation between Compute collection and Transport node
    template.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'compute_collection_id': 'compute_collection_id',
                            'has_nvds': 'has_nvds',
                            'sub_cluster_config': 'sub_cluster_config',
                            'transport_node_profile_id': 'transport_node_profile_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 compute_collection_id=None,
                 has_nvds=None,
                 sub_cluster_config=None,
                 transport_node_profile_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  compute_collection_id: :class:`str` or ``None``
        :param compute_collection_id: Compute collection id
        :type  has_nvds: :class:`bool` or ``None``
        :param has_nvds: Flag indicating if applied profile has NVDS

            .. deprecated:: unknown
        :type  sub_cluster_config: :class:`list` of :class:`SubClusterConfig` or ``None``
        :param sub_cluster_config: List of sub-cluster configuration
        :type  transport_node_profile_id: :class:`str` or ``None``
        :param transport_node_profile_id: Transport Node Profile 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.compute_collection_id = compute_collection_id
        self.has_nvds = has_nvds
        self.sub_cluster_config = sub_cluster_config
        self.transport_node_profile_id = transport_node_profile_id
        VapiStruct.__init__(self)


HostTransportNodeCollection._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_transport_node_collection', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'compute_collection_id': type.OptionalType(type.StringType()),
        'has_nvds': type.OptionalType(type.BooleanType()),
        'sub_cluster_config': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SubClusterConfig'))),
        'transport_node_profile_id': type.OptionalType(type.StringType()),
    },
    HostTransportNodeCollection,
    False,
    None))



class HostTransportNodeCollectionListResult(VapiStruct):
    """
    Transport Node collections 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_: 
        :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:`HostTransportNodeCollection` or ``None``
        :param results: Transport Node collection 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.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)


HostTransportNodeCollectionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_transport_node_collection_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__, 'HostTransportNodeCollection'))),
    },
    HostTransportNodeCollectionListResult,
    False,
    None))



class HostTransportNodeListResult(VapiStruct):
    """
    Host Transport Node 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_: 
        :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:`HostTransportNode` or ``None``
        :param results: Host TransportNode 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.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)


HostTransportNodeListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.host_transport_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__, 'HostTransportNode'))),
    },
    HostTransportNodeListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 IPAddresses(VapiStruct):
    """


    .. 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 IP addresses in the form of IP Address, IP Range, CIDR, used as
            source IPs or destination IPs of filters. format:
            address-or-block-or-range
        """
        self.ip_addresses = ip_addresses
        VapiStruct.__init__(self)


IPAddresses._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_addresses', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    IPAddresses,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :type  ip_v4_discovery_options: :class:`IPv4DiscoveryOptions` or ``None``
        :param ip_v4_discovery_options: 
        :type  ip_v6_discovery_options: :class:`IPv6DiscoveryOptions` or ``None``
        :param ip_v6_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 IPSecVPNSessionTrafficSummary(VapiStruct):
    """
    IPSec VPN session traffic summary.

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



    _canonical_to_pep_names = {
                            'ipsec_vpn_session': 'ipsec_vpn_session',
                            'traffic_counters': 'traffic_counters',
                            }

    def __init__(self,
                 ipsec_vpn_session=None,
                 traffic_counters=None,
                ):
        """
        :type  ipsec_vpn_session: :class:`ResourceReference` or ``None``
        :param ipsec_vpn_session: 
        :type  traffic_counters: :class:`IPSecVPNTrafficCounters` or ``None``
        :param traffic_counters: 
        """
        self.ipsec_vpn_session = ipsec_vpn_session
        self.traffic_counters = traffic_counters
        VapiStruct.__init__(self)


IPSecVPNSessionTrafficSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_VPN_session_traffic_summary', {
        'ipsec_vpn_session': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVPNTrafficCounters')),
    },
    IPSecVPNSessionTrafficSummary,
    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 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 10 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. A default value of SHA2_256 will be
            applied only when the supplied encryption algorithms contain either
            AES_128 or AES_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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. In federation, all the configuration done for the local
    endpoint on GM will be realized based on the scope attribute at the
    corresponding LM. Local endpoint without any scope will be realized on all
    sites. The scope attribute is applicable only on GM not on LM.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'scope': 'scope',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 certificate_path=None,
                 local_address=None,
                 local_id=None,
                 scope=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 or IPv6 Address of local endpoint. Please note that
            configuring local_address as IPv6 address is not supported in the
            deprecated IPSecVpnLocalEndpoint Patch/PUT APIs. format: ip
        :type  local_id: :class:`str` or ``None``
        :param local_id: Local identifier.
        :type  scope: :class:`str` or ``None``
        :param scope: Scope attribute refers to the Policy path identifying the
            LocaleService of specific site where all the local end point
            configurations will be realized. In federation, all the
            configuration done for the local endpoint on GM will be realized
            based on the scope at the corresponding LM. Local endpoint without
            any scope will be realized on all sites. This attribute will not be
            applicable on LM.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.scope = scope
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'scope': 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_: 
        :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: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 IPv4 or IPv6 peer subnets. Specifying no value is
            interpreted as 0.0.0.0/0, ::/0. The maximum number of IPv4 or IPv6
            local subnets allowed is 128 Please note that configuring IPv6 peer
            subnets is not supported in the deprecated IPSecVpnSession
            Patch/PUT APIs.
        :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 IPv4 or IPv6 local subnets. Specifying no value is
            interpreted as 0.0.0.0/0, ::/0. The maximum number of IPv4 or IPv6
            local subnets allowed is 128 Please note that configuring IPv6
            local subnets is not supported in the deprecated IPSecVpnSession
            Patch/PUT APIs.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 under tier-0/tier-1.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 under tier-0/tier-1.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'site_overrides': 'site_overrides',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 site_overrides=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. This property is mandatory
            on LM. It is required on GM only in case of site_overrides property
            not provided.
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Public IPV4 or IPV6 address of the remote device terminating the
            VPN connection. This property is mandatory on LM. It is required on
            GM only in case of site_overrides property not provided. Please
            note that configuring peer_address as IPv6 address is not supported
            in the deprecated IPSecVpnSession Patch/PUT APIs. format: ip
        :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. This property is mandatory on LM. It is required on GM
            only in case of site_overrides property not provided.
        :type  psk: :class:`str` or ``None``
        :param psk: IPSec Pre-shared key. Maximum length of this field is 128
            characters.
        :type  site_overrides: :class:`list` of :class:`SiteOverride` or ``None``
        :param site_overrides: A collection of site specific attributes specificed only on GM
        :type  tcp_mss_clamping: :class:`TcpMaximumSegmentSizeClamping` or ``None``
        :param tcp_mss_clamping: 
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.site_overrides = site_overrides
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'site_overrides': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteOverride'))),
        '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_: 
        :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: 
        :type  ike_status: :class:`IPSecVpnIkeSessionStatus` or ``None``
        :param ike_status: 
        :type  ike_traffic_statistics: :class:`IPSecVpnIkeTrafficStatistics` or ``None``
        :param ike_traffic_statistics: 
        :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: 
        :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: 
        :type  ike_traffic_statistics: :class:`IPSecVpnIkeTrafficStatistics` or ``None``
        :param ike_traffic_statistics: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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: ip-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: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. Supports
            assigning both IPv4 and IPV6 subnets to VTI. If two IPs are
            provided for VTI, both cannot be of same IP versions. Please note
            that configuring IPv6 subnets to VTI is not supported in the
            deprecated IPSecVpnSession Patch/PUT APIs.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 IPSubnet(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: All IP addresses, some of which may be automatically configured.
            When updating this field, the payload may contain only the IP
            addresses that should be changed, or may contain the IP addresses
            to change as well as the automatically assigned addresses.
            Currently, only one updatable address and one system-maintained
            address are supported. Currently, the system-maintained address
            supported is Extended Unique Identifier(EUI)-64 address. EUI-64
            address is generated by the system only when user configured
            ip-subnet has prefix length less than or equal to 64. format: ip
        :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)


IPSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_subnet', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'prefix_length': type.OptionalType(type.IntegerType()),
    },
    IPSubnet,
    False,
    None))



class IPsecVPNIKESessionSummary(VapiStruct):
    """
    IPSec VPN session status summary, gives total, failed, degraded and
    established IPSec VPN sessions.

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



    _canonical_to_pep_names = {
                            'degraded_sessions': 'degraded_sessions',
                            'established_sessions': 'established_sessions',
                            'failed_sessions': 'failed_sessions',
                            'total_sessions': 'total_sessions',
                            }

    def __init__(self,
                 degraded_sessions=None,
                 established_sessions=None,
                 failed_sessions=None,
                 total_sessions=None,
                ):
        """
        :type  degraded_sessions: :class:`long` or ``None``
        :param degraded_sessions: Number of degraded 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  established_sessions: :class:`long` or ``None``
        :param established_sessions: Number of established 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  failed_sessions: :class:`long` or ``None``
        :param failed_sessions: Number of failed 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_sessions: :class:`long` or ``None``
        :param total_sessions: Total sessions configured. format: int64
            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.degraded_sessions = degraded_sessions
        self.established_sessions = established_sessions
        self.failed_sessions = failed_sessions
        self.total_sessions = total_sessions
        VapiStruct.__init__(self)


IPsecVPNIKESessionSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.I_psec_VPNIKE_session_summary', {
        'degraded_sessions': type.OptionalType(type.IntegerType()),
        'established_sessions': type.OptionalType(type.IntegerType()),
        'failed_sessions': type.OptionalType(type.IntegerType()),
        'total_sessions': type.OptionalType(type.IntegerType()),
    },
    IPsecVPNIKESessionSummary,
    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: 
        :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: 
        :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 IPv6EndPoint(VapiStruct):
    """
    IPv6 virtual tunnel end point

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



    _canonical_to_pep_names = {
                            'default_gateway': 'default_gateway',
                            'ipv6': 'ipv6',
                            'prefix_length': 'prefix_length',
                            }

    def __init__(self,
                 default_gateway=None,
                 ipv6=None,
                 prefix_length=None,
                ):
        """
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Default gateway for IPv6 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  ipv6: :class:`str` or ``None``
        :param ipv6: Depending upon the EndpointIpConfig used in HostSwitch, IP could be
            allocated either from DHCP (default) or from Static IP 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.
        :type  prefix_length: :class:`str` or ``None``
        :param prefix_length: Prefix length for IPv6
            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.default_gateway = default_gateway
        self.ipv6 = ipv6
        self.prefix_length = prefix_length
        VapiStruct.__init__(self)


IPv6EndPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.I_pv6_end_point', {
        'default_gateway': type.OptionalType(type.StringType()),
        'ipv6': type.OptionalType(type.StringType()),
        'prefix_length': type.OptionalType(type.StringType()),
    },
    IPv6EndPoint,
    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',
                            'tier0_gateway': 'tier0_gateway',
                            'tier1_gateway': 'tier1_gateway',
                            }

    def __init__(self,
                 connected_segment_path=None,
                 dad_statuses=None,
                 interface_id=None,
                 tier0_gateway=None,
                 tier1_gateway=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.
        :type  tier0_gateway: :class:`str` or ``None``
        :param tier0_gateway: Tier-0 Gateway this router Link belongs to.
        :type  tier1_gateway: :class:`str` or ``None``
        :param tier1_gateway: Tier-1 Gateway this router Link belongs to.
        """
        self.connected_segment_path = connected_segment_path
        self.dad_statuses = dad_statuses
        self.interface_id = interface_id
        self.tier0_gateway = tier0_gateway
        self.tier1_gateway = tier1_gateway
        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()),
        'tier0_gateway': type.OptionalType(type.StringType()),
        'tier1_gateway': 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 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"
    """


    """
    SIZE_UNIT_PX = "px"
    """


    """
    SIZE_UNIT_REM = "rem"
    """


    """
    SIZE_UNIT_PC = "pc"
    """


    """



    _canonical_to_pep_names = {
                            'color': 'color',
                            'placement': 'placement',
                            'size': 'size',
                            'size_unit': 'size_unit',
                            'tooltip': 'tooltip',
                            'type': 'type',
                            }

    def __init__(self,
                 color=None,
                 placement=None,
                 size=None,
                 size_unit=None,
                 tooltip=None,
                 type=None,
                ):
        """
        :type  color: :class:`str` or ``None``
        :param color: Icon color applied to icon in hex format.
        :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  size: :class:`float` or ``None``
        :param size: Icon size in unit applied to icon.A unit can be specified by the
            'size_unit' property.
        :type  size_unit: :class:`str` or ``None``
        :param size_unit: Possible values are: 
            
            * :attr:`Icon.SIZE_UNIT_PX`
            * :attr:`Icon.SIZE_UNIT_REM`
            * :attr:`Icon.SIZE_UNIT_PC`
            
            Icon size unit applied to icon along with size. if 'size' property
            value is provided and no value is provided for this property then
            default value for this proerty is set to 'px'.
        :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: Icon will be rendered based on its type. For example, if ERROR is
            chosen, then icon representing error will be rendered. or else
            custom svg icon name can be given.
        """
        self.color = color
        self.placement = placement
        self.size = size
        self.size_unit = size_unit
        self.tooltip = tooltip
        self.type = type
        VapiStruct.__init__(self)


Icon._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.icon', {
        'color': type.OptionalType(type.StringType()),
        'placement': type.OptionalType(type.StringType()),
        'size': type.OptionalType(type.DoubleType()),
        'size_unit': type.OptionalType(type.StringType()),
        'tooltip': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tooltip'))),
        'type': type.OptionalType(type.StringType()),
    },
    Icon,
    False,
    None))



class IdentityFirewallAdStore(VapiStruct):
    """
    Active IdentityFirewallStore

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IdentityFirewallAdStore"
    """
    Identifier denoting this class, when it is used 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 = {
                            'base_distinguished_name': 'base_distinguished_name',
                            'netbios_name': 'netbios_name',
                            'selective_sync_settings': 'selective_sync_settings',
                            'sync_settings': 'sync_settings',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'event_log_servers': 'event_log_servers',
                            'ldap_servers': 'ldap_servers',
                            'name': 'name',
                            }

    def __init__(self,
                 base_distinguished_name=None,
                 netbios_name=None,
                 selective_sync_settings=None,
                 sync_settings=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='IdentityFirewallAdStore',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 event_log_servers=None,
                 ldap_servers=None,
                 name=None,
                ):
        """
        :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  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:`SelectiveSyncSettings` or ``None``
        :param selective_sync_settings: 
        :type  sync_settings: :class:`DirectoryDomainSyncSettings` or ``None``
        :param sync_settings: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`IdentityFirewallStore.RESOURCE_TYPE_IDENTITYFIREWALLADSTORE`
            
            Domain resource type comes from multiple sub-classes extending this
            base class. For example, IdentityFirewallAdStore is one accepted
            resource_type. If there are more sub-classes defined, they will
            also be accepted resource_type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  event_log_servers: :class:`list` of :class:`IdentityFirewallStoreEventLogServer` or ``None``
        :param event_log_servers: IdentityFirewallStore Event Log server's information including
            host, name, protocol and so on.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ldap_servers: :class:`list` of :class:`IdentityFirewallStoreLdapServer` or ``None``
        :param ldap_servers: IdentityFirewallStore LDAP servers' information including host,
            name, port, protocol and so on.
        :type  name: :class:`str` or ``None``
        :param name: IdentityFirewallStore name which best describes the Directory
            domain. It could be unique fqdn name or it could also be
            descriptive. There is no unique contraint for domain name among
            different domains.
        """
        self.base_distinguished_name = base_distinguished_name
        self.netbios_name = netbios_name
        self.selective_sync_settings = selective_sync_settings
        self.sync_settings = sync_settings
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.event_log_servers = event_log_servers
        self.ldap_servers = ldap_servers
        self.name = name
        VapiStruct.__init__(self)

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

IdentityFirewallAdStore._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_ad_store', {
        'base_distinguished_name': type.OptionalType(type.StringType()),
        'netbios_name': type.OptionalType(type.StringType()),
        'selective_sync_settings': type.OptionalType(type.ReferenceType(__name__, 'SelectiveSyncSettings')),
        'sync_settings': type.OptionalType(type.ReferenceType(__name__, 'DirectoryDomainSyncSettings')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'event_log_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentityFirewallStoreEventLogServer'))),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentityFirewallStoreLdapServer'))),
        'name': type.OptionalType(type.StringType()),
    },
    IdentityFirewallAdStore,
    False,
    None))



class IdentityFirewallStore(VapiStruct):
    """
    IdentityFirewallStore

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IdentityFirewallStore"
    """
    Identifier denoting this class, when it is used 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_IDENTITYFIREWALLADSTORE = "IdentityFirewallAdStore"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'event_log_servers': 'event_log_servers',
                            'ldap_servers': 'ldap_servers',
                            'name': '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='IdentityFirewallStore',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 event_log_servers=None,
                 ldap_servers=None,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`IdentityFirewallStore.RESOURCE_TYPE_IDENTITYFIREWALLADSTORE`
            
            Domain resource type comes from multiple sub-classes extending this
            base class. For example, IdentityFirewallAdStore is one accepted
            resource_type. If there are more sub-classes defined, they will
            also be accepted resource_type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  event_log_servers: :class:`list` of :class:`IdentityFirewallStoreEventLogServer` or ``None``
        :param event_log_servers: IdentityFirewallStore Event Log server's information including
            host, name, protocol and so on.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ldap_servers: :class:`list` of :class:`IdentityFirewallStoreLdapServer` or ``None``
        :param ldap_servers: IdentityFirewallStore LDAP servers' information including host,
            name, port, protocol and so on.
        :type  name: :class:`str` or ``None``
        :param name: IdentityFirewallStore name which best describes the Directory
            domain. It could be unique fqdn name or it could also be
            descriptive. There is no unique contraint for domain name among
            different domains.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.event_log_servers = event_log_servers
        self.ldap_servers = ldap_servers
        self.name = name
        VapiStruct.__init__(self)

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

IdentityFirewallStore._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_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.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'event_log_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentityFirewallStoreEventLogServer'))),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentityFirewallStoreLdapServer'))),
        'name': type.OptionalType(type.StringType()),
    },
    IdentityFirewallStore,
    False,
    None))



class IdentityFirewallStoreEventLogServer(VapiStruct):
    """
    Event log server of IdentityFirewallStore

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'domain_name': 'domain_name',
                            'host': 'host',
                            'password': 'password',
                            'status': 'status',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 domain_name=None,
                 host=None,
                 password=None,
                 status=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: IdentityFirewallStore name which best describes the
            IdentityFirewallStore. It could be unique fqdn name or it could
            also be descriptive. There is no unique contraint for
            IdentityFirewallStore name among different IdentityFirewallStores.
        :type  host: :class:`str` or ``None``
        :param host: Directory Event Log server DNS host name or ip address which is
            reachable by NSX manager to be connected and do event fetching.
            format: hostname-or-ip
        :type  password: :class:`str` or ``None``
        :param password: IdentityFirewallStore event log server connection password.
        :type  status: :class:`DirectoryEventLogServerStatus` or ``None``
        :param status: 
        :type  username: :class:`str` or ``None``
        :param username: Directory event log 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.status = status
        self.username = username
        VapiStruct.__init__(self)


IdentityFirewallStoreEventLogServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_store_event_log_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'status': type.OptionalType(type.ReferenceType(__name__, 'DirectoryEventLogServerStatus')),
        'username': type.OptionalType(type.StringType()),
    },
    IdentityFirewallStoreEventLogServer,
    False,
    None))



class IdentityFirewallStoreLdapServer(VapiStruct):
    """
    LDAP server of directory domain

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: IdentityFirewallStore name which best describes the domain. It
            could be unique fqdn name or it could also be descriptive. There is
            no unique contraint for IdentityFirewallStore name among different
            IdentityFirewallStores.
        :type  host: :class:`str` or ``None``
        :param host: IdentityFirewallStore LDAP server DNS host name or ip address which
            is reachable by NSX manager to be connected and do object
            synchronization. format: hostname-or-ip
        :type  password: :class:`str` or ``None``
        :param password: IdentityFirewallStore LDAP server connection password.
        :type  port: :class:`long` or ``None``
        :param port: IdentityFirewallStore LDAP server connection TCP/UDP port. format:
            int64
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`IdentityFirewallStoreLdapServer.PROTOCOL_LDAP`
            * :attr:`IdentityFirewallStoreLdapServer.PROTOCOL_LDAPS`
            
            IdentityFirewallStore LDAP server connection protocol which is
            either LDAP or LDAPS.
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: IdentityFirewallStore LDAP server certificate thumbprint used in
            secure LDAPS connection.
        :type  username: :class:`str` or ``None``
        :param username: IdentityFirewallStore 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


IdentityFirewallStoreLdapServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    IdentityFirewallStoreLdapServer,
    False,
    None))



class IdentityFirewallStoreLdapServerListResults(VapiStruct):
    """
    List of FirewallIdentityStore LDAP servers

    .. 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_: 
        :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:`IdentityFirewallStoreLdapServer` or ``None``
        :param results: List of directory domain LDAP servers
        """
        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)


IdentityFirewallStoreLdapServerListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_store_ldap_server_list_results', {
        '_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__, 'IdentityFirewallStoreLdapServer'))),
    },
    IdentityFirewallStoreLdapServerListResults,
    False,
    None))



class IdentityFirewallStoreListResults(VapiStruct):
    """
    List of IdentityFirewallStore

    .. 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_: 
        :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 IdentityFirewallStores
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IdentityFirewallStore`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`IdentityFirewallStore`.
        """
        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)


IdentityFirewallStoreListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_store_list_results', {
        '_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__, 'IdentityFirewallStore')]))),
    },
    IdentityFirewallStoreListResults,
    False,
    None))



class IdentityFirewallStoreUserOrGroup(VapiStruct):
    """
    IdentityFirewallStore User or 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',
                            'distinguished_name': 'distinguished_name',
                            'domain_id': 'domain_id',
                            'domain_name': 'domain_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,
                 distinguished_name=None,
                 domain_id=None,
                 domain_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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: IdentityFirewallStore user or group resource type for this domain
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  distinguished_name: :class:`str` or ``None``
        :param distinguished_name: IdentityFirewallStore user or group distinguished name
        :type  domain_id: :class:`str` or ``None``
        :param domain_id: Domain id
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: IdentityFirewallStore domain 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.distinguished_name = distinguished_name
        self.domain_id = domain_id
        self.domain_name = domain_name
        VapiStruct.__init__(self)


IdentityFirewallStoreUserOrGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_store_user_or_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'))),
        'distinguished_name': type.OptionalType(type.StringType()),
        'domain_id': type.OptionalType(type.StringType()),
        'domain_name': type.OptionalType(type.StringType()),
    },
    IdentityFirewallStoreUserOrGroup,
    False,
    None))



class IdentityFirewallStoreUserOrGrouptListResults(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_: 
        :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:`IdentityFirewallStoreUserOrGroup` or ``None``
        :param results: IdentityFirewallStoreUserOrGroup 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)


IdentityFirewallStoreUserOrGrouptListResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_firewall_store_user_or_groupt_list_results', {
        '_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__, 'IdentityFirewallStoreUserOrGroup'))),
    },
    IdentityFirewallStoreUserOrGrouptListResults,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 IdfwComputeCollectionCondition(VapiStruct):
    """
    Status of the Identity Firewall enabled Compute collection.

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


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DFW_DISABLED = "DFW_DISABLED"
    """


    """
    STATUS_IDFW_ENABLED = "IDFW_ENABLED"
    """


    """
    STATUS_IDFW_DISABLED = "IDFW_DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'status': 'status',
                            'status_detail': 'status_detail',
                            }

    def __init__(self,
                 status=None,
                 status_detail=None,
                ):
        """
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`IdfwComputeCollectionCondition.STATUS_UNKNOWN`
            * :attr:`IdfwComputeCollectionCondition.STATUS_UP`
            * :attr:`IdfwComputeCollectionCondition.STATUS_DOWN`
            * :attr:`IdfwComputeCollectionCondition.STATUS_DFW_DISABLED`
            * :attr:`IdfwComputeCollectionCondition.STATUS_IDFW_ENABLED`
            * :attr:`IdfwComputeCollectionCondition.STATUS_IDFW_DISABLED`
            
            IDFW enabled Compute collection status.
        :type  status_detail: :class:`str` or ``None``
        :param status_detail: Status of the Compute collection.
        """
        self.status = status
        self.status_detail = status_detail
        VapiStruct.__init__(self)


IdfwComputeCollectionCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_compute_collection_condition', {
        'status': type.OptionalType(type.StringType()),
        'status_detail': type.OptionalType(type.StringType()),
    },
    IdfwComputeCollectionCondition,
    False,
    None))



class IdfwComputeCollectionListResult(VapiStruct):
    """
    List of compute collection ids and status connected to VC.

    .. 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_: 
        :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:`IdfwComputeCollectionStatus` or ``None``
        :param results: Array of IDFW compute collection Ids and status connected to VC.
        """
        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)


IdfwComputeCollectionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_compute_collection_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__, 'IdfwComputeCollectionStatus'))),
    },
    IdfwComputeCollectionListResult,
    False,
    None))



class IdfwComputeCollectionStatus(VapiStruct):
    """
    compute collection ID and status connected to VC.

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



    _canonical_to_pep_names = {
                            'compute_collection_id': 'compute_collection_id',
                            'compute_collection_status': 'compute_collection_status',
                            }

    def __init__(self,
                 compute_collection_id=None,
                 compute_collection_status=None,
                ):
        """
        :type  compute_collection_id: :class:`str` or ``None``
        :param compute_collection_id: IDFW compute collection ID connected to VC.
        :type  compute_collection_status: :class:`list` of :class:`IdfwComputeCollectionCondition` or ``None``
        :param compute_collection_status: IDFW enabled compute collection status.
        """
        self.compute_collection_id = compute_collection_id
        self.compute_collection_status = compute_collection_status
        VapiStruct.__init__(self)


IdfwComputeCollectionStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_compute_collection_status', {
        'compute_collection_id': type.OptionalType(type.StringType()),
        'compute_collection_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwComputeCollectionCondition'))),
    },
    IdfwComputeCollectionStatus,
    False,
    None))



class IdfwDirGroupUserSessionMapping(VapiStruct):
    """
    Identity Firewall NSGorup to user mapping to link DirGroup to user session
    data.

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



    _canonical_to_pep_names = {
                            'dir_group_id': 'dir_group_id',
                            'user_id': 'user_id',
                            }

    def __init__(self,
                 dir_group_id=None,
                 user_id=None,
                ):
        """
        :type  dir_group_id: :class:`str` or ``None``
        :param dir_group_id: Directory Group 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  user_id: :class:`str` or ``None``
        :param user_id: User 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.dir_group_id = dir_group_id
        self.user_id = user_id
        VapiStruct.__init__(self)


IdfwDirGroupUserSessionMapping._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_dir_group_user_session_mapping', {
        'dir_group_id': type.OptionalType(type.StringType()),
        'user_id': type.OptionalType(type.StringType()),
    },
    IdfwDirGroupUserSessionMapping,
    False,
    None))



class IdfwSystemStats(VapiStruct):
    """
    Identity Firewall statistics data.

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



    _canonical_to_pep_names = {
                            'num_concurrent_users': 'num_concurrent_users',
                            'num_user_sessions': 'num_user_sessions',
                            }

    def __init__(self,
                 num_concurrent_users=None,
                 num_user_sessions=None,
                ):
        """
        :type  num_concurrent_users: :class:`long` or ``None``
        :param num_concurrent_users: Number of concurrent logged on users (across VDI & RDSH). Multiple
            logins by the same user is counted as 1. format: int32
        :type  num_user_sessions: :class:`long` or ``None``
        :param num_user_sessions: Number of active user sessions/logins in IDFW enabled compute
            collections (including both UP and DOWN hosts). N sessions/logins
            by the same user is counted as n. format: int32
        """
        self.num_concurrent_users = num_concurrent_users
        self.num_user_sessions = num_user_sessions
        VapiStruct.__init__(self)


IdfwSystemStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_system_stats', {
        'num_concurrent_users': type.OptionalType(type.IntegerType()),
        'num_user_sessions': type.OptionalType(type.IntegerType()),
    },
    IdfwSystemStats,
    False,
    None))



class IdfwTransportNodeCondition(VapiStruct):
    """
    Status of the Identity Firewall Compute Collection's transport node.

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


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_NOT_PREPARED = "NOT_PREPARED"
    """


    """
    STATUS_IDFW_COMPONENT_NOT_INSTALLED = "IDFW_COMPONENT_NOT_INSTALLED"
    """


    """
    STATUS_DFW_DISABLED = "DFW_DISABLED"
    """


    """
    STATUS_IDFW_DISABLED = "IDFW_DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'status': 'status',
                            'status_detail': 'status_detail',
                            }

    def __init__(self,
                 status=None,
                 status_detail=None,
                ):
        """
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`IdfwTransportNodeCondition.STATUS_UNKNOWN`
            * :attr:`IdfwTransportNodeCondition.STATUS_UP`
            * :attr:`IdfwTransportNodeCondition.STATUS_DOWN`
            * :attr:`IdfwTransportNodeCondition.STATUS_NOT_PREPARED`
            *
              :attr:`IdfwTransportNodeCondition.STATUS_IDFW_COMPONENT_NOT_INSTALLED`
            * :attr:`IdfwTransportNodeCondition.STATUS_DFW_DISABLED`
            * :attr:`IdfwTransportNodeCondition.STATUS_IDFW_DISABLED`
            
            Transport node status for IDFW compute collection.
        :type  status_detail: :class:`str` or ``None``
        :param status_detail: IDFW Compute collection's transport node condition.
        """
        self.status = status
        self.status_detail = status_detail
        VapiStruct.__init__(self)


IdfwTransportNodeCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_transport_node_condition', {
        'status': type.OptionalType(type.StringType()),
        'status_detail': type.OptionalType(type.StringType()),
    },
    IdfwTransportNodeCondition,
    False,
    None))



class IdfwTransportNodeStatus(VapiStruct):
    """
    ID and status of the Identity Firewall enabled Compute collection's
    transport node.

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



    _canonical_to_pep_names = {
                            'transport_node_id': 'transport_node_id',
                            'transport_node_status': 'transport_node_status',
                            }

    def __init__(self,
                 transport_node_id=None,
                 transport_node_status=None,
                ):
        """
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: TransportNode ID of the Identity Firewall enabled Compute
            collection's transport node.
        :type  transport_node_status: :class:`list` of :class:`IdfwTransportNodeCondition` or ``None``
        :param transport_node_status: Status of the IDFW transport node.
        """
        self.transport_node_id = transport_node_id
        self.transport_node_status = transport_node_status
        VapiStruct.__init__(self)


IdfwTransportNodeStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_transport_node_status', {
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwTransportNodeCondition'))),
    },
    IdfwTransportNodeStatus,
    False,
    None))



class IdfwTransportNodeStatusListResult(VapiStruct):
    """
    Status of the Identity Firewall enabled Compute collection transport nodes.

    .. 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_: 
        :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:`IdfwTransportNodeStatus` or ``None``
        :param results: List of transport node ids and status for idfw enabled Compute
            collection.
        """
        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)


IdfwTransportNodeStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_transport_node_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__, 'IdfwTransportNodeStatus'))),
    },
    IdfwTransportNodeStatusListResult,
    False,
    None))



class IdfwUserSessionData(VapiStruct):
    """
    Identity Firewall user session data on a client machine (typically a VM).
    Multiple entries for the same user can be returned if the user logins to
    multiple sessions on the same VM.

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


    """
    SESSION_SOURCE_ELS = "ELS"
    """


    """
    SESSION_SOURCE_LI = "LI"
    """


    """



    _canonical_to_pep_names = {
                            'domain_name': 'domain_name',
                            'id': 'id',
                            'login_time': 'login_time',
                            'logout_time': 'logout_time',
                            'session_source': 'session_source',
                            'user_id': 'user_id',
                            'user_name': 'user_name',
                            'user_session_id': 'user_session_id',
                            'vm_ext_id': 'vm_ext_id',
                            }

    def __init__(self,
                 domain_name=None,
                 id=None,
                 login_time=None,
                 logout_time=None,
                 session_source=None,
                 user_id=None,
                 user_name=None,
                 user_session_id=None,
                 vm_ext_id=None,
                ):
        """
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: AD Domain of user.
        :type  id: :class:`str` or ``None``
        :param id: Identifier of user session data.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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. Non-active user session is stored (up to last 5 most recent
            entries) per VM and per user. format: int64
        :type  session_source: :class:`str` or ``None``
        :param session_source: Possible values are: 
            
            * :attr:`IdfwUserSessionData.SESSION_SOURCE_GI`
            * :attr:`IdfwUserSessionData.SESSION_SOURCE_ELS`
            * :attr:`IdfwUserSessionData.SESSION_SOURCE_LI`
            
            User session source can be one of: - GI (Guest Introspection) - ELS
            (AD Event log server) - LI (Log Insight)
            This 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_id: :class:`str` or ``None``
        :param user_id: AD user ID (may not 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.
        :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: int64
        :type  vm_ext_id: :class:`str` or ``None``
        :param vm_ext_id: Virtual machine (external ID or BIOS UUID) where login/logout
            events occurred.
            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_name = domain_name
        self.id = id
        self.login_time = login_time
        self.logout_time = logout_time
        self.session_source = session_source
        self.user_id = user_id
        self.user_name = user_name
        self.user_session_id = user_session_id
        self.vm_ext_id = vm_ext_id
        VapiStruct.__init__(self)


IdfwUserSessionData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_user_session_data', {
        'domain_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'login_time': type.OptionalType(type.IntegerType()),
        'logout_time': type.OptionalType(type.IntegerType()),
        'session_source': type.OptionalType(type.StringType()),
        'user_id': type.OptionalType(type.StringType()),
        'user_name': type.OptionalType(type.StringType()),
        'user_session_id': type.OptionalType(type.IntegerType()),
        'vm_ext_id': type.OptionalType(type.StringType()),
    },
    IdfwUserSessionData,
    False,
    None))



class IdfwUserSessionDataAndMappings(VapiStruct):
    """
    Identity Firewall user session data list and Directory Group to user
    mappings.

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



    _canonical_to_pep_names = {
                            'active_user_sessions': 'active_user_sessions',
                            'archived_user_sessions': 'archived_user_sessions',
                            'dir_group_to_user_session_data_mappings': 'dir_group_to_user_session_data_mappings',
                            }

    def __init__(self,
                 active_user_sessions=None,
                 archived_user_sessions=None,
                 dir_group_to_user_session_data_mappings=None,
                ):
        """
        :type  active_user_sessions: :class:`list` of :class:`IdfwUserSessionData` or ``None``
        :param active_user_sessions: Active user session data list
        :type  archived_user_sessions: :class:`list` of :class:`IdfwUserSessionData` or ``None``
        :param archived_user_sessions: Archived user session data list
        :type  dir_group_to_user_session_data_mappings: :class:`list` of :class:`IdfwDirGroupUserSessionMapping` or ``None``
        :param dir_group_to_user_session_data_mappings: Directory Group to user session data mappings
        """
        self.active_user_sessions = active_user_sessions
        self.archived_user_sessions = archived_user_sessions
        self.dir_group_to_user_session_data_mappings = dir_group_to_user_session_data_mappings
        VapiStruct.__init__(self)


IdfwUserSessionDataAndMappings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_user_session_data_and_mappings', {
        'active_user_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwUserSessionData'))),
        'archived_user_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwUserSessionData'))),
        'dir_group_to_user_session_data_mappings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwDirGroupUserSessionMapping'))),
    },
    IdfwUserSessionDataAndMappings,
    False,
    None))



class IdfwUserStats(VapiStruct):
    """
    Identity Firewall user login/session data for a single user.

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



    _canonical_to_pep_names = {
                            'active_sessions': 'active_sessions',
                            'archived_sessions': 'archived_sessions',
                            'user_id': 'user_id',
                            }

    def __init__(self,
                 active_sessions=None,
                 archived_sessions=None,
                 user_id=None,
                ):
        """
        :type  active_sessions: :class:`list` of :class:`IdfwUserSessionData` or ``None``
        :param active_sessions: List of active (still logged in) user login/sessions data (no
            limit)
        :type  archived_sessions: :class:`list` of :class:`IdfwUserSessionData` or ``None``
        :param archived_sessions: Optional list of up to 5 most recent archived (previously logged
            in) user login/session data.
        :type  user_id: :class:`str` or ``None``
        :param user_id: AD user Identifier (String 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.active_sessions = active_sessions
        self.archived_sessions = archived_sessions
        self.user_id = user_id
        VapiStruct.__init__(self)


IdfwUserStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_user_stats', {
        'active_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwUserSessionData'))),
        'archived_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwUserSessionData'))),
        'user_id': type.OptionalType(type.StringType()),
    },
    IdfwUserStats,
    False,
    None))



class IdfwVirtualMachineCondition(VapiStruct):
    """
    Status of the Identity Firewall compute collection's VM.

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


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_VM_TOOLS_NOT_INSTALLED = "VM_TOOLS_NOT_INSTALLED"
    """


    """
    STATUS_IDFW_NOT_SUPPORTED = "IDFW_NOT_SUPPORTED"
    """


    """
    STATUS_DFW_DISABLED = "DFW_DISABLED"
    """


    """
    STATUS_IDFW_DISABLED = "IDFW_DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'status': 'status',
                            'status_detail': 'status_detail',
                            }

    def __init__(self,
                 status=None,
                 status_detail=None,
                ):
        """
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`IdfwVirtualMachineCondition.STATUS_UNKNOWN`
            * :attr:`IdfwVirtualMachineCondition.STATUS_UP`
            * :attr:`IdfwVirtualMachineCondition.STATUS_DOWN`
            * :attr:`IdfwVirtualMachineCondition.STATUS_VM_TOOLS_NOT_INSTALLED`
            * :attr:`IdfwVirtualMachineCondition.STATUS_IDFW_NOT_SUPPORTED`
            * :attr:`IdfwVirtualMachineCondition.STATUS_DFW_DISABLED`
            * :attr:`IdfwVirtualMachineCondition.STATUS_IDFW_DISABLED`
            
            VM IDFW Status.
        :type  status_detail: :class:`str` or ``None``
        :param status_detail: IDFW compute collection's VM condition.
        """
        self.status = status
        self.status_detail = status_detail
        VapiStruct.__init__(self)


IdfwVirtualMachineCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_virtual_machine_condition', {
        'status': type.OptionalType(type.StringType()),
        'status_detail': type.OptionalType(type.StringType()),
    },
    IdfwVirtualMachineCondition,
    False,
    None))



class IdfwVirtualMachineStatus(VapiStruct):
    """
    ID and status of the VM on Identity Firewall compute collection.

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



    _canonical_to_pep_names = {
                            'vm_id': 'vm_id',
                            'vm_status': 'vm_status',
                            }

    def __init__(self,
                 vm_id=None,
                 vm_status=None,
                ):
        """
        :type  vm_id: :class:`str` or ``None``
        :param vm_id: VM ID of the VM on Identity Firewall compute collection.
        :type  vm_status: :class:`list` of :class:`IdfwVirtualMachineCondition` or ``None``
        :param vm_status: Status of the Identity Firewall compute collection's Virtual
            Machine.
        """
        self.vm_id = vm_id
        self.vm_status = vm_status
        VapiStruct.__init__(self)


IdfwVirtualMachineStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_virtual_machine_status', {
        'vm_id': type.OptionalType(type.StringType()),
        'vm_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwVirtualMachineCondition'))),
    },
    IdfwVirtualMachineStatus,
    False,
    None))



class IdfwVirtualMachineStatusListResult(VapiStruct):
    """
    VM ID and status of the Identity Firewall Compute collection.

    .. 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_: 
        :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:`IdfwVirtualMachineStatus` or ``None``
        :param results: List of VM's on Identity Firewall Compute collection.
        """
        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)


IdfwVirtualMachineStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_virtual_machine_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__, 'IdfwVirtualMachineStatus'))),
    },
    IdfwVirtualMachineStatusListResult,
    False,
    None))



class IdfwVmDetail(VapiStruct):
    """
    Identity Firewall user login/session data for a single VM

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



    _canonical_to_pep_names = {
                            'last_login_user_session': 'last_login_user_session',
                            'user_sessions': 'user_sessions',
                            'vm_ext_id': 'vm_ext_id',
                            'vm_ip_addresses': 'vm_ip_addresses',
                            }

    def __init__(self,
                 last_login_user_session=None,
                 user_sessions=None,
                 vm_ext_id=None,
                 vm_ip_addresses=None,
                ):
        """
        :type  last_login_user_session: :class:`ResourceReference` or ``None``
        :param last_login_user_session: 
        :type  user_sessions: :class:`list` of :class:`IdfwUserSessionData` or ``None``
        :param user_sessions: List of user session data.
        :type  vm_ext_id: :class:`str` or ``None``
        :param vm_ext_id: Virtual machine (external ID or BIOS UUID) where login/logout event
            occurred.
        :type  vm_ip_addresses: :class:`list` of :class:`str` or ``None``
        :param vm_ip_addresses: List of client machine IP addresses.
        """
        self.last_login_user_session = last_login_user_session
        self.user_sessions = user_sessions
        self.vm_ext_id = vm_ext_id
        self.vm_ip_addresses = vm_ip_addresses
        VapiStruct.__init__(self)


IdfwVmDetail._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_vm_detail', {
        'last_login_user_session': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'user_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwUserSessionData'))),
        'vm_ext_id': type.OptionalType(type.StringType()),
        'vm_ip_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    IdfwVmDetail,
    False,
    None))



class IdfwVmStats(VapiStruct):
    """
    Identity Firewall user login/session data for a single VM.

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



    _canonical_to_pep_names = {
                            'active_sessions': 'active_sessions',
                            'archived_sessions': 'archived_sessions',
                            'vm_ext_id': 'vm_ext_id',
                            }

    def __init__(self,
                 active_sessions=None,
                 archived_sessions=None,
                 vm_ext_id=None,
                ):
        """
        :type  active_sessions: :class:`list` of :class:`IdfwUserSessionData` or ``None``
        :param active_sessions: List of active (still logged in) user login/sessions data (no
            limit)
        :type  archived_sessions: :class:`list` of :class:`IdfwUserSessionData` or ``None``
        :param archived_sessions: Optional list of up to 5 most recent archived (previously logged
            in) user login/session data.
        :type  vm_ext_id: :class:`str` or ``None``
        :param vm_ext_id: Virtual machine (external ID or BIOS UUID) where login/logout event
            occurred.
        """
        self.active_sessions = active_sessions
        self.archived_sessions = archived_sessions
        self.vm_ext_id = vm_ext_id
        VapiStruct.__init__(self)


IdfwVmStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.idfw_vm_stats', {
        'active_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwUserSessionData'))),
        'archived_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwUserSessionData'))),
        'vm_ext_id': type.OptionalType(type.StringType()),
    },
    IdfwVmStats,
    False,
    None))



class IdsClusterConfig(VapiStruct):
    """
    IDS configuration to activate/deactivate 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cluster': 'cluster',
                            'ids_enabled': 'ids_enabled',
                            'is_stale': 'is_stale',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cluster=None,
                 ids_enabled=None,
                 is_stale=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :type  ids_enabled: :class:`bool` or ``None``
        :param ids_enabled: If set to true, IDS is enabled on the respective cluster
        :type  is_stale: :class:`bool` or ``None``
        :param is_stale: If set to true, this cluster has been deleted from 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.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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
        self.is_stale = is_stale
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'is_stale': 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_: 
        :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 IdsGatewayPolicy(VapiStruct):
    """
    Represents the Intrusion Detection System Gateway 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


IdsGatewayPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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'))),
    },
    IdsGatewayPolicy,
    False,
    None))



class IdsGatewayPolicyListResult(VapiStruct):
    """
    Paged collection of IDS 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_: 
        :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:`IdsGatewayPolicy` or ``None``
        :param results: IDS Gateway 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)


IdsGatewayPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_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__, 'IdsGatewayPolicy'))),
    },
    IdsGatewayPolicyListResult,
    False,
    None))



class IdsGlobalEventConfig(VapiStruct):
    """
    Represents IDS event publishing configuration for NSX-I and NDR.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ids_data_topic_name': 'ids_data_topic_name',
                            'publish_ids_events': 'publish_ids_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ids_data_topic_name=None,
                 publish_ids_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_data_topic_name: :class:`str` or ``None``
        :param ids_data_topic_name: kafka topic into which to publish IDS events.
        :type  publish_ids_events: :class:`bool` or ``None``
        :param publish_ids_events: When this flag is set to true, IDS events will be sent to kafka,
            for consumption by components such as NSX-I and NDR.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ids_data_topic_name = ids_data_topic_name
        self.publish_ids_events = publish_ids_events
        VapiStruct.__init__(self)


IdsGlobalEventConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_global_event_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_data_topic_name': type.OptionalType(type.StringType()),
        'publish_ids_events': type.OptionalType(type.BooleanType()),
    },
    IdsGlobalEventConfig,
    False,
    None))



class IdsPcapConfig(VapiStruct):
    """
    Pcap Configuration for IdsProfile.

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



    _canonical_to_pep_names = {
                            'pcap_byte_count': 'pcap_byte_count',
                            'pcap_enabled': 'pcap_enabled',
                            'pcap_packet_count': 'pcap_packet_count',
                            }

    def __init__(self,
                 pcap_byte_count=None,
                 pcap_enabled=None,
                 pcap_packet_count=None,
                ):
        """
        :type  pcap_byte_count: :class:`long` or ``None``
        :param pcap_byte_count: Determine how many bytes will be captured. format: int32
        :type  pcap_enabled: :class:`bool` or ``None``
        :param pcap_enabled: Flag which determines whether packet capturing is enabled or not.
        :type  pcap_packet_count: :class:`long` or ``None``
        :param pcap_packet_count: Determine how many packets will be captured. format: int32
        """
        self.pcap_byte_count = pcap_byte_count
        self.pcap_enabled = pcap_enabled
        self.pcap_packet_count = pcap_packet_count
        VapiStruct.__init__(self)


IdsPcapConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_pcap_config', {
        'pcap_byte_count': type.OptionalType(type.IntegerType()),
        'pcap_enabled': type.OptionalType(type.BooleanType()),
        'pcap_packet_count': type.OptionalType(type.IntegerType()),
    },
    IdsPcapConfig,
    False,
    None))



class IdsPcapExport(VapiStruct):
    """
    Export the pcap file of all the mentioned pcap_ids.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'pcap_ids': 'pcap_ids',
                            'signature_ids': 'signature_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 pcap_ids=None,
                 signature_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  pcap_ids: :class:`list` of :class:`str` or ``None``
        :param pcap_ids: List of all pcap ids for which the pcap file are requested by the
            user.
        :type  signature_ids: :class:`list` of :class:`str` or ``None``
        :param signature_ids: List of all signature ids which are part of the events whose pcap
            files is requested by the 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
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.pcap_ids = pcap_ids
        self.signature_ids = signature_ids
        VapiStruct.__init__(self)


IdsPcapExport._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_pcap_export', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'pcap_ids': type.OptionalType(type.ListType(type.StringType())),
        'signature_ids': type.OptionalType(type.ListType(type.StringType())),
    },
    IdsPcapExport,
    False,
    None))



class IdsPcapFileMetadata(VapiStruct):
    """
    Represents pcap file as requested by the User.

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


    """
    STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """
    STATUS_INCOMPLETE = "INCOMPLETE"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'available_until': 'available_until',
                            'exported_on': 'exported_on',
                            'failure_cause': 'failure_cause',
                            'file_name': 'file_name',
                            'file_size': 'file_size',
                            'node_id': 'node_id',
                            'pcap_ids': 'pcap_ids',
                            'signature_ids': 'signature_ids',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 available_until=None,
                 exported_on=None,
                 failure_cause=None,
                 file_name=None,
                 file_size=None,
                 node_id=None,
                 pcap_ids=None,
                 signature_ids=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_until: :class:`str` or ``None``
        :param available_until: Time until which the file will be avilable for download.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  exported_on: :class:`str` or ``None``
        :param exported_on: Time when the file extraction started.
            This 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_cause: :class:`str` or ``None``
        :param failure_cause: If creation of zipped pcap file fails then this will tell the
            failure cause.
            This 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_name: :class:`str` or ``None``
        :param file_name: Name of the Pcap File requested by the user.
        :type  file_size: :class:`long` or ``None``
        :param file_size: Tells the size of the zipped pcap 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.
        :type  node_id: :class:`str` or ``None``
        :param node_id: Node wher file extraction is triggered.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pcap_ids: :class:`list` of :class:`str` or ``None``
        :param pcap_ids: List of all pcap ids which are requested by the user as part of
            this File.
        :type  signature_ids: :class:`list` of :class:`str` or ``None``
        :param signature_ids: List of all signature ids which are part of the events whose pcap
            files is selected by the user as part of this File.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`IdsPcapFileMetadata.STATUS_READY`
            * :attr:`IdsPcapFileMetadata.STATUS_IN_PROGRESS`
            * :attr:`IdsPcapFileMetadata.STATUS_FAILED`
            * :attr:`IdsPcapFileMetadata.STATUS_INCOMPLETE`
            
            READY means zipped pcap file is succesfully created and ready to
            download. IN_PROGRESS means creation of zipped pcap file is in
            progress. FAILED means some error occurred during creation of
            zipped pcap file. INCOMPLETE means zipped pcap file doea not have
            all the specified pcaps.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.available_until = available_until
        self.exported_on = exported_on
        self.failure_cause = failure_cause
        self.file_name = file_name
        self.file_size = file_size
        self.node_id = node_id
        self.pcap_ids = pcap_ids
        self.signature_ids = signature_ids
        self.status = status
        VapiStruct.__init__(self)


IdsPcapFileMetadata._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_pcap_file_metadata', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_until': type.OptionalType(type.StringType()),
        'exported_on': type.OptionalType(type.StringType()),
        'failure_cause': type.OptionalType(type.StringType()),
        'file_name': type.OptionalType(type.StringType()),
        'file_size': type.OptionalType(type.IntegerType()),
        'node_id': type.OptionalType(type.StringType()),
        'pcap_ids': type.OptionalType(type.ListType(type.StringType())),
        'signature_ids': type.OptionalType(type.ListType(type.StringType())),
        'status': type.OptionalType(type.StringType()),
    },
    IdsPcapFileMetadata,
    False,
    None))



class IdsPcapFileMetadataListResult(VapiStruct):
    """
    Paged collection of IDS Pcap File

    .. 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_: 
        :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:`IdsPcapFileMetadata` or ``None``
        :param results: IDS Pcap File 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)


IdsPcapFileMetadataListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_pcap_file_metadata_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__, 'IdsPcapFileMetadata'))),
    },
    IdsPcapFileMetadataListResult,
    False,
    None))



class IdsPolicy(VapiStruct):
    """
    Represents the Intrusion Detection System 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


IdsPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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'))),
    },
    IdsPolicy,
    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.
    """
    PROFILE_SEVERITY_CRITICAL = "CRITICAL"
    """


    """
    PROFILE_SEVERITY_HIGH = "HIGH"
    """


    """
    PROFILE_SEVERITY_MEDIUM = "MEDIUM"
    """


    """
    PROFILE_SEVERITY_LOW = "LOW"
    """


    """
    PROFILE_SEVERITY_SUSPICIOUS = "SUSPICIOUS"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'criteria': 'criteria',
                            'overridden_signatures': 'overridden_signatures',
                            'pcap_config': 'pcap_config',
                            'profile_severity': 'profile_severity',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 criteria=None,
                 overridden_signatures=None,
                 pcap_config=None,
                 profile_severity=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  criteria: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param criteria: Represents the filtering criteria for the IDS Profile. 1. A
            non-empty criteria list, must be of odd size. In a list, with
            indices starting from 0, all IdsProfileFilterCriteria must be at
            even indices, separated by the IdsProfileConjunctionOperator AND at
            odd indices. 2. There may be at most 7 IdsProfileCriteria objects
            inside a list.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IdsProfileCriteria`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`IdsProfileCriteria`.
        :type  overridden_signatures: :class:`list` of :class:`IdsProfileLocalSignature` or ``None``
        :param overridden_signatures: Represents the signatures that has been overridden for this
            Profile.
        :type  pcap_config: :class:`IdsPcapConfig` or ``None``
        :param pcap_config: 
        :type  profile_severity: :class:`list` of :class:`str` or ``None``
        :param profile_severity: Possible values are: 
            
            * :attr:`IdsProfile.PROFILE_SEVERITY_CRITICAL`
            * :attr:`IdsProfile.PROFILE_SEVERITY_HIGH`
            * :attr:`IdsProfile.PROFILE_SEVERITY_MEDIUM`
            * :attr:`IdsProfile.PROFILE_SEVERITY_LOW`
            * :attr:`IdsProfile.PROFILE_SEVERITY_SUSPICIOUS`
            
            Represents the severities of signatures which are part of this
            profile.
        :type  severities: :class:`list` of :class:`IdsProfileSeverity` or ``None``
        :param severities: Represents the severities of signatures which are part of this
            profile.

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.criteria = criteria
        self.overridden_signatures = overridden_signatures
        self.pcap_config = pcap_config
        self.profile_severity = profile_severity
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'criteria': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IdsProfileCriteria')]))),
        'overridden_signatures': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsProfileLocalSignature'))),
        'pcap_config': type.OptionalType(type.ReferenceType(__name__, 'IdsPcapConfig')),
        'profile_severity': type.OptionalType(type.ListType(type.StringType())),
        'severities': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsProfileSeverity'))),
    },
    IdsProfile,
    False,
    None))



class IdsProfileConjunctionOperator(VapiStruct):
    """
    Represents the operator AND.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IdsProfileConjunctionOperator"
    """
    Identifier denoting this class, when it is used 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_AND = "AND"
    """


    """



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

    def __init__(self,
                 operator=None,
                 resource_type='IdsProfileConjunctionOperator',
                ):
        """
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`IdsProfileConjunctionOperator.OPERATOR_AND`
            
            IDS Profile Filter Condition
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IdsProfileCriteria.RESOURCE_TYPE_IDSPROFILECONJUNCTIONOPERATOR`
            * :attr:`IdsProfileCriteria.RESOURCE_TYPE_IDSPROFILEFILTERCRITERIA`
        """
        self.operator = operator
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

IdsProfileConjunctionOperator._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_profile_conjunction_operator', {
        'operator': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    IdsProfileConjunctionOperator,
    False,
    None))



class IdsProfileCriteria(VapiStruct):
    """
    All the filtering criteria objects 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 = "IdsProfileCriteria"
    """
    Identifier denoting this class, when it is used 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_IDSPROFILECONJUNCTIONOPERATOR = "IdsProfileConjunctionOperator"
    """


    """
    RESOURCE_TYPE_IDSPROFILEFILTERCRITERIA = "IdsProfileFilterCriteria"
    """


    """



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

    def __init__(self,
                 resource_type='IdsProfileCriteria',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IdsProfileCriteria.RESOURCE_TYPE_IDSPROFILECONJUNCTIONOPERATOR`
            * :attr:`IdsProfileCriteria.RESOURCE_TYPE_IDSPROFILEFILTERCRITERIA`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class IdsProfileFilterCriteria(VapiStruct):
    """
    Represents the filtering criteria of a IDS Profile.

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

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

    """
    FILTER_NAME_CVSS = "CVSS"
    """


    """
    FILTER_NAME_ATTACK_TARGET = "ATTACK_TARGET"
    """


    """
    FILTER_NAME_ATTACK_TYPE = "ATTACK_TYPE"
    """


    """
    FILTER_NAME_PRODUCT_AFFECTED = "PRODUCT_AFFECTED"
    """


    """



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

    def __init__(self,
                 filter_name=None,
                 filter_value=None,
                 resource_type='IdsProfileFilterCriteria',
                ):
        """
        :type  filter_name: :class:`str` or ``None``
        :param filter_name: Possible values are: 
            
            * :attr:`IdsProfileFilterCriteria.FILTER_NAME_CVSS`
            * :attr:`IdsProfileFilterCriteria.FILTER_NAME_ATTACK_TARGET`
            * :attr:`IdsProfileFilterCriteria.FILTER_NAME_ATTACK_TYPE`
            * :attr:`IdsProfileFilterCriteria.FILTER_NAME_PRODUCT_AFFECTED`
            
            Represents the filter for IDS Profile.
        :type  filter_value: :class:`list` of :class:`str` or ``None``
        :param filter_value: Represents the value of selected filter name. Note : The supported
            values for filter name CVSS are NONE, LOW, MEDIUM, HIGH, CRITICAL.
            NONE means CVSS score as 0.0 LOW means CVSS score as 0.1-3.9 MEDIUM
            means CVSS score as 4.0-6.9 HIGH means CVSS score as 7.0-8.9
            CRITICAL means CVSS score as 9.0-10.0
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IdsProfileCriteria.RESOURCE_TYPE_IDSPROFILECONJUNCTIONOPERATOR`
            * :attr:`IdsProfileCriteria.RESOURCE_TYPE_IDSPROFILEFILTERCRITERIA`
        """
        self.filter_name = filter_name
        self.filter_value = filter_value
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

IdsProfileFilterCriteria._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_profile_filter_criteria', {
        'filter_name': type.OptionalType(type.StringType()),
        'filter_value': type.OptionalType(type.ListType(type.StringType())),
        'resource_type': type.StringType(),
    },
    IdsProfileFilterCriteria,
    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_: 
        :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 IdsProfileLocalSignature(VapiStruct):
    """
    IDS Profile local signature.

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


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'enable': 'enable',
                            'signature_id': 'signature_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 enable=None,
                 signature_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`IdsProfileLocalSignature.ACTION_ALERT`
            * :attr:`IdsProfileLocalSignature.ACTION_DROP`
            * :attr:`IdsProfileLocalSignature.ACTION_REJECT`
            
            It denotes the global action of a IDS Signature. This will take
            precedence over IDS signature's action.
        :type  enable: :class:`bool` or ``None``
        :param enable: Flag through which user can Activate/Deactivate a Signature at
            Global Level.
        :type  signature_id: :class:`str` or ``None``
        :param signature_id: Represents the Signature's id.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.enable = enable
        self.signature_id = signature_id
        VapiStruct.__init__(self)


IdsProfileLocalSignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_profile_local_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'enable': type.OptionalType(type.BooleanType()),
        'signature_id': type.OptionalType(type.StringType()),
    },
    IdsProfileLocalSignature,
    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"
    """


    """
    SEVERITY_SUSPICIOUS = "SUSPICIOUS"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. This field is deprecated, please use ignore_signatures
            field under IdsProfile to ignore the signatures.
        :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`
            * :attr:`IdsProfileSeverity.SEVERITY_SUSPICIOUS`
            
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 IdsProfileSignatures(VapiStruct):
    """
    An entity that holds the list of IDS signatures attached to an IDS Profile
    depending upon the Profile's criteria. These are the Signatures which needs
    to be detected.

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



    _canonical_to_pep_names = {
                            'profile_path': 'profile_path',
                            'signatures': 'signatures',
                            }

    def __init__(self,
                 profile_path=None,
                 signatures=None,
                ):
        """
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: Represents the Path of the IDS Profile.
        :type  signatures: :class:`list` of :class:`str` or ``None``
        :param signatures: List of IDS signature ids which need to be detected.
        """
        self.profile_path = profile_path
        self.signatures = signatures
        VapiStruct.__init__(self)


IdsProfileSignatures._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_profile_signatures', {
        'profile_path': type.OptionalType(type.StringType()),
        'signatures': type.OptionalType(type.ListType(type.StringType())),
    },
    IdsProfileSignatures,
    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"
    """


    """
    ACTION_DETECT_PREVENT = "DETECT_PREVENT"
    """


    """
    OVERSUBSCRIPTION_BYPASSED = "BYPASSED"
    """


    """
    OVERSUBSCRIPTION_DROPPED = "DROPPED"
    """


    """
    OVERSUBSCRIPTION_INHERIT_GLOBAL = "INHERIT_GLOBAL"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'oversubscription': 'oversubscription',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 oversubscription=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate the rule. Default is activated.
        :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 deactivated.
        :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. Instead of Layer 7 service profiles you can use a L7
            access profile. One of either Layer 7 service profiles or L7 Access
            Profile can be used in firewall rule. In case of L7 access profile
            only one is allowed.
        :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. Even
            though there is no limitation on length of a tag, internally tag
            will get truncated after 32 characters.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`IdsRule.ACTION_DETECT`
            * :attr:`IdsRule.ACTION_DETECT_PREVENT`
            
            The action to be applied.
        :type  ids_profiles: :class:`list` of :class:`str` or ``None``
        :param ids_profiles: collections of IDS or Anti-Malware profiles. At Max 1 each Profile
            will be supported.
        :type  oversubscription: :class:`str` or ``None``
        :param oversubscription: Possible values are: 
            
            * :attr:`IdsRule.OVERSUBSCRIPTION_BYPASSED`
            * :attr:`IdsRule.OVERSUBSCRIPTION_DROPPED`
            * :attr:`IdsRule.OVERSUBSCRIPTION_INHERIT_GLOBAL`
            
            Following are the choices for oversubscription configuration at the
            rule-level. INHERIT_GLOBAL: Inherit the behavior from the global
            settings BYPASSED: Oversubscribed packets would be bypassed from
            the IDPS Engine DROPPED: Oversubscribed packets would be dropped
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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
        self.oversubscription = oversubscription
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'oversubscription': type.OptionalType(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_: 
        :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 IdsRuleStatistics(VapiStruct):
    """
    IDS 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_',
                            'byte_count': 'byte_count',
                            'hit_count': 'hit_count',
                            'internal_rule_id': 'internal_rule_id',
                            'l7_accept_count': 'l7_accept_count',
                            'l7_reject_count': 'l7_reject_count',
                            'l7_reject_with_response_count': 'l7_reject_with_response_count',
                            '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,
                 l7_accept_count=None,
                 l7_reject_count=None,
                 l7_reject_with_response_count=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_: 
        :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  l7_accept_count: :class:`long` or ``None``
        :param l7_accept_count: Aggregated number of L7 Profile Accepted counters 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  l7_reject_count: :class:`long` or ``None``
        :param l7_reject_count: Aggregated number of L7 Profile Rejected counters 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  l7_reject_with_response_count: :class:`long` or ``None``
        :param l7_reject_with_response_count: Aggregated number of L7 Profile Rejected with Response counters
            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  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.l7_accept_count = l7_accept_count
        self.l7_reject_count = l7_reject_count
        self.l7_reject_with_response_count = l7_reject_with_response_count
        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)


IdsRuleStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_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()),
        'l7_accept_count': type.OptionalType(type.IntegerType()),
        'l7_reject_count': type.OptionalType(type.IntegerType()),
        'l7_reject_with_response_count': type.OptionalType(type.IntegerType()),
        '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()),
    },
    IdsRuleStatistics,
    False,
    None))



class IdsRuleStatisticsForEnforcementPoint(VapiStruct):
    """
    IDS 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: IDS 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:`IdsRuleStatistics` or ``None``
        :param statistics: 
        """
        self.enforcement_point = enforcement_point
        self.statistics = statistics
        VapiStruct.__init__(self)


IdsRuleStatisticsForEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_rule_statistics_for_enforcement_point', {
        'enforcement_point': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'IdsRuleStatistics')),
    },
    IdsRuleStatisticsForEnforcementPoint,
    False,
    None))



class IdsRuleStatisticsListResult(VapiStruct):
    """
    Paged Collection of IDS 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_: 
        :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:`IdsRuleStatisticsForEnforcementPoint` or ``None``
        :param results: IdsRuleStatistics 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)


IdsRuleStatisticsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_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__, 'IdsRuleStatisticsForEnforcementPoint'))),
    },
    IdsRuleStatisticsListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 IdsSecurityPolicyStatistics(VapiStruct):
    """
    IDS RSecurity Policy Statistics.

    .. 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)


IdsSecurityPolicyStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_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'))),
    },
    IdsSecurityPolicyStatistics,
    False,
    None))



class IdsSecurityPolicyStatisticsForEnforcementPoint(VapiStruct):
    """
    Aggregate statistics of all the IDS 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:`IdsSecurityPolicyStatistics` or ``None``
        :param statistics: 
        """
        self.enforcement_point = enforcement_point
        self.statistics = statistics
        VapiStruct.__init__(self)


IdsSecurityPolicyStatisticsForEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_security_policy_statistics_for_enforcement_point', {
        'enforcement_point': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'IdsSecurityPolicyStatistics')),
    },
    IdsSecurityPolicyStatisticsForEnforcementPoint,
    False,
    None))



class IdsSecurityPolicyStatisticsListResult(VapiStruct):
    """
    Paged Collection of IDS 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_: 
        :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:`IdsSecurityPolicyStatisticsForEnforcementPoint` or ``None``
        :param results: IDS 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)


IdsSecurityPolicyStatisticsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_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__, 'IdsSecurityPolicyStatisticsForEnforcementPoint'))),
    },
    IdsSecurityPolicyStatisticsListResult,
    False,
    None))



class IdsSettings(VapiStruct):
    """
    Represents the Intrusion Detection System settings.

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


    """
    OVERSUBSCRIPTION_DROPPED = "DROPPED"
    """


    """
    OVERSUBSCRIPTION_INHERIT_GLOBAL = "INHERIT_GLOBAL"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'auto_update': 'auto_update',
                            'ids_events_to_syslog': 'ids_events_to_syslog',
                            'ids_ever_enabled': 'ids_ever_enabled',
                            'oversubscription': 'oversubscription',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 auto_update=None,
                 ids_events_to_syslog=None,
                 ids_ever_enabled=None,
                 oversubscription=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_events_to_syslog: :class:`bool` or ``None``
        :param ids_events_to_syslog: Flag to send IDS events to syslog server.
        :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.
        :type  oversubscription: :class:`str` or ``None``
        :param oversubscription: Possible values are: 
            
            * :attr:`IdsSettings.OVERSUBSCRIPTION_BYPASSED`
            * :attr:`IdsSettings.OVERSUBSCRIPTION_DROPPED`
            * :attr:`IdsSettings.OVERSUBSCRIPTION_INHERIT_GLOBAL`
            
            Following are the choices for oversubscription configuration at the
            global level. BYPASSED: Oversubscribed packets would be bypassed
            from the IDPS Engine DROPPED: Oversubscribed packets would be
            dropped
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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_events_to_syslog = ids_events_to_syslog
        self.ids_ever_enabled = ids_ever_enabled
        self.oversubscription = oversubscription
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_events_to_syslog': type.OptionalType(type.BooleanType()),
        'ids_ever_enabled': type.OptionalType(type.BooleanType()),
        'oversubscription': type.OptionalType(type.StringType()),
    },
    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"
    """


    """
    CVSS_NONE = "NONE"
    """


    """
    CVSS_LOW = "LOW"
    """


    """
    CVSS_MEDIUM = "MEDIUM"
    """


    """
    CVSS_HIGH = "HIGH"
    """


    """
    CVSS_CRITICAL = "CRITICAL"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'attack_target': 'attack_target',
                            'categories': 'categories',
                            'class_type': 'class_type',
                            'confidence': 'confidence',
                            'cves': 'cves',
                            'cvss': 'cvss',
                            'cvss_score': 'cvss_score',
                            'cvssv2': 'cvssv2',
                            'cvssv3': 'cvssv3',
                            'direction': 'direction',
                            'enable': 'enable',
                            'flow': 'flow',
                            'impact': 'impact',
                            'malware_family': 'malware_family',
                            'mitre_attack': 'mitre_attack',
                            'name': 'name',
                            'performance_impact': 'performance_impact',
                            'policy': 'policy',
                            'product_affected': 'product_affected',
                            'protocol': 'protocol',
                            'risk_score': 'risk_score',
                            'severity': 'severity',
                            'signature': 'signature',
                            'signature_id': 'signature_id',
                            'signature_revision': 'signature_revision',
                            'signature_severity': 'signature_severity',
                            'tag': 'tag',
                            'type': 'type',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 attack_target=None,
                 categories=None,
                 class_type=None,
                 confidence=None,
                 cves=None,
                 cvss=None,
                 cvss_score=None,
                 cvssv2=None,
                 cvssv3=None,
                 direction=None,
                 enable=None,
                 flow=None,
                 impact=None,
                 malware_family=None,
                 mitre_attack=None,
                 name=None,
                 performance_impact=None,
                 policy=None,
                 product_affected=None,
                 protocol=None,
                 risk_score=None,
                 severity=None,
                 signature=None,
                 signature_id=None,
                 signature_revision=None,
                 signature_severity=None,
                 tag=None,
                 type=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Signature action.
        :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  confidence: :class:`str` or ``None``
        :param confidence: Signature's confidence score.
        :type  cves: :class:`list` of :class:`str` or ``None``
        :param cves: CVE score
        :type  cvss: :class:`str` or ``None``
        :param cvss: Possible values are: 
            
            * :attr:`IdsSignature.CVSS_NONE`
            * :attr:`IdsSignature.CVSS_LOW`
            * :attr:`IdsSignature.CVSS_MEDIUM`
            * :attr:`IdsSignature.CVSS_HIGH`
            * :attr:`IdsSignature.CVSS_CRITICAL`
            
            Represents the cvss value of a Signature. The value is derived from
            cvssv3 or cvssv2 score. NONE means cvssv3/cvssv2 score as 0.0 LOW
            means cvssv3/cvssv2 score as 0.1-3.9 MEDIUM means cvssv3/cvssv2
            score as 4.0-6.9 HIGH means cvssv3/cvssv2 score as 7.0-8.9 CRITICAL
            means cvssv3/cvssv2 score as 9.0-10.0
        :type  cvss_score: :class:`str` or ``None``
        :param cvss_score: Represents the cvss value of a Signature. The value is derived from
            cvssv3 or cvssv2 score. If cvssv3 exists, then this is the cvssv3
            score, else it is the cvssv2 score.
        :type  cvssv2: :class:`str` or ``None``
        :param cvssv2: Signature cvssv2 score.
        :type  cvssv3: :class:`str` or ``None``
        :param cvssv3: Signature cvssv3 score.
        :type  direction: :class:`str` or ``None``
        :param direction: Source-destination direction.
        :type  enable: :class:`bool` or ``None``
        :param enable: Flag which tells whether the signature is enabled or not.
        :type  flow: :class:`str` or ``None``
        :param flow: Flow established from server, from client etc.
        :type  impact: :class:`str` or ``None``
        :param impact: Impact of Signature.
        :type  malware_family: :class:`str` or ``None``
        :param malware_family: Family of the malware tracked in the signature.
        :type  mitre_attack: :class:`list` of :class:`MitreAttack` or ``None``
        :param mitre_attack: Mitre Attack details of Signature.
        :type  name: :class:`str` or ``None``
        :param name: Signature name.
        :type  performance_impact: :class:`str` or ``None``
        :param performance_impact: Performance impact of the signature.
        :type  policy: :class:`list` of :class:`str` or ``None``
        :param policy: Signature policy.
        :type  product_affected: :class:`str` or ``None``
        :param product_affected: Product affected by this signature.
        :type  protocol: :class:`str` or ``None``
        :param protocol: Protocol used in the packet analysis.
        :type  risk_score: :class:`str` or ``None``
        :param risk_score: Risk score of signature.
        :type  severity: :class:`str` or ``None``
        :param severity: Represents the severity of the Signature.
        :type  signature: :class:`str` or ``None``
        :param signature: Decoded 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  signature_severity: :class:`str` or ``None``
        :param signature_severity: Signature vendor set severity of the signature rule.
        :type  tag: :class:`list` of :class:`str` or ``None``
        :param tag: Vendor assigned classification tag.
        :type  type: :class:`list` of :class:`str` or ``None``
        :param type: Signature type.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.attack_target = attack_target
        self.categories = categories
        self.class_type = class_type
        self.confidence = confidence
        self.cves = cves
        self.cvss = cvss
        self.cvss_score = cvss_score
        self.cvssv2 = cvssv2
        self.cvssv3 = cvssv3
        self.direction = direction
        self.enable = enable
        self.flow = flow
        self.impact = impact
        self.malware_family = malware_family
        self.mitre_attack = mitre_attack
        self.name = name
        self.performance_impact = performance_impact
        self.policy = policy
        self.product_affected = product_affected
        self.protocol = protocol
        self.risk_score = risk_score
        self.severity = severity
        self.signature = signature
        self.signature_id = signature_id
        self.signature_revision = signature_revision
        self.signature_severity = signature_severity
        self.tag = tag
        self.type = type
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'attack_target': type.OptionalType(type.StringType()),
        'categories': type.OptionalType(type.ListType(type.StringType())),
        'class_type': type.OptionalType(type.StringType()),
        'confidence': type.OptionalType(type.StringType()),
        'cves': type.OptionalType(type.ListType(type.StringType())),
        'cvss': type.OptionalType(type.StringType()),
        'cvss_score': type.OptionalType(type.StringType()),
        'cvssv2': type.OptionalType(type.StringType()),
        'cvssv3': type.OptionalType(type.StringType()),
        'direction': type.OptionalType(type.StringType()),
        'enable': type.OptionalType(type.BooleanType()),
        'flow': type.OptionalType(type.StringType()),
        'impact': type.OptionalType(type.StringType()),
        'malware_family': type.OptionalType(type.StringType()),
        'mitre_attack': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MitreAttack'))),
        'name': type.OptionalType(type.StringType()),
        'performance_impact': type.OptionalType(type.StringType()),
        'policy': type.OptionalType(type.ListType(type.StringType())),
        'product_affected': type.OptionalType(type.StringType()),
        'protocol': type.OptionalType(type.StringType()),
        'risk_score': type.OptionalType(type.StringType()),
        'severity': type.OptionalType(type.StringType()),
        'signature': type.OptionalType(type.StringType()),
        'signature_id': type.OptionalType(type.StringType()),
        'signature_revision': type.OptionalType(type.StringType()),
        'signature_severity': type.OptionalType(type.StringType()),
        'tag': type.OptionalType(type.ListType(type.StringType())),
        'type': type.OptionalType(type.ListType(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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'download_status': 'download_status',
                            'failure_cause': 'failure_cause',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 download_status=None,
                 failure_cause=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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
            deactivated.
            This 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_cause: :class:`str` or ``None``
        :param failure_cause: If signature download fails then this will tell the failure cause.
            This 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.failure_cause = failure_cause
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'failure_cause': 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'change_log': 'change_log',
                            'sites': 'sites',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 change_log=None,
                 sites=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  sites: :class:`list` of :class:`str` or ``None``
        :param sites: Contains the path of sites that has been mapped with the Signature
            Version.
        :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 the 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.sites = sites
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'sites': type.OptionalType(type.ListType(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_: 
        :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 activate/deactivate 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'gateway_path': 'gateway_path',
                            'igmp_memberships_per_edge': 'igmp_memberships_per_edge',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 gateway_path=None,
                 igmp_memberships_per_edge=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 or Tier1 gateway.
        :type  igmp_memberships_per_edge: :class:`list` of :class:`IgmpMembershipsPerEdge` or ``None``
        :param igmp_memberships_per_edge: 
        """
        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.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', {
        '_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()),
        '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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'edge_path': 'edge_path',
                            'igmp_memberships': 'igmp_memberships',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 edge_path=None,
                 igmp_memberships=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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 to edge node.
        :type  igmp_memberships: :class:`list` of :class:`IgmpMembership` or ``None``
        :param igmp_memberships: 
        """
        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.igmp_memberships = igmp_memberships
        VapiStruct.__init__(self)


IgmpMembershipsPerEdge._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.igmp_memberships_per_edge', {
        '_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()),
        'igmp_memberships': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IgmpMembership'))),
    },
    IgmpMembershipsPerEdge,
    False,
    None))



class ImportTask(VapiStruct):
    """
    This object holds the information of the import task.

    .. 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',
                            'failure_msg': 'failure_msg',
                            'draft_path': 'draft_path',
                            }

    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,
                 failure_msg=None,
                 draft_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_: 
        :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:`ImportTask.STATUS_RUNNING`
            * :attr:`ImportTask.STATUS_ERROR`
            * :attr:`ImportTask.STATUS_SUCCESS`
            * :attr:`ImportTask.STATUS_CANCELING`
            * :attr:`ImportTask.STATUS_CANCELED`
            * :attr:`ImportTask.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.
        :type  failure_msg: :class:`str` or ``None``
        :param failure_msg: This property holds the reason of the task failure, if 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  draft_path: :class:`str` or ``None``
        :param draft_path: Policy path of a draft in which the imported configuration gets
            stored after completion of import 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
        self.failure_msg = failure_msg
        self.draft_path = draft_path
        VapiStruct.__init__(self)


ImportTask._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.import_task', {
        '_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()),
        'failure_msg': type.OptionalType(type.StringType()),
        'draft_path': type.OptionalType(type.StringType()),
    },
    ImportTask,
    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: Note - this parameter currently only works when used with the
            search APIs /policy/api/v1/search/query and
            /policy/api/v1/search/dsl. It is ignored for other list APIs.
        """
        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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 - Whitelisting with logging enabled
            BLACKLIST_ENABLE_LOGGING - Blacklisting with logging enabled NONE -
            No default rules are added.

            .. deprecated:: unknown
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 InfraSecurityConfig(VapiStruct):
    """
    NSX global configs for security purposes, like trust store and trust
    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',
                            'ca_signed_only': 'ca_signed_only',
                            'crl_checking_enabled': 'crl_checking_enabled',
                            'eku_checking_enabled': 'eku_checking_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,
                 ca_signed_only=None,
                 crl_checking_enabled=None,
                 eku_checking_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  ca_signed_only: :class:`bool` or ``None``
        :param ca_signed_only: When this flag is set to true (for NDcPP compliance) only ca-signed
            certificates will be allowed to be applied as server certificates.
            Since this check has now moved to the compliance-report, enabling
            this check is no longer required if the NDcPP Security alarms have
            been enabled.
        :type  crl_checking_enabled: :class:`bool` or ``None``
        :param crl_checking_enabled: When this flag is set to true, during certificate checking the CRL
            is fetched and checked whether the certificate is revoked or not.
            Setting this property to false results in lower security. It is not
            advisable to import certificate without CRL info while CRL checking
            is deactivated, and then re-enable CRL checking.
        :type  eku_checking_enabled: :class:`bool` or ``None``
        :param eku_checking_enabled: When this flag is set to true, during certificate checking the
            Extended Key Usage extension is expected to be present, indicating
            whether the certificate is to be used a client certificate or
            server certificate. Setting this value to false is not recommended
            as it leads to lower security and operational risk. Since this
            check has now moved to the compliance-report, enabling/disabling
            this flag no longer has any effect when applying 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.ca_signed_only = ca_signed_only
        self.crl_checking_enabled = crl_checking_enabled
        self.eku_checking_enabled = eku_checking_enabled
        VapiStruct.__init__(self)


InfraSecurityConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.infra_security_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'))),
        'ca_signed_only': type.OptionalType(type.BooleanType()),
        'crl_checking_enabled': type.OptionalType(type.BooleanType()),
        'eku_checking_enabled': type.OptionalType(type.BooleanType()),
    },
    InfraSecurityConfig,
    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: 
            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 IntegerArrayConstraintValue(VapiStruct):
    """
    List of values

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IntegerArrayConstraintValue"
    """
    Identifier denoting this class, when it is used 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 = {
                            'values': 'values',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 values=None,
                 resource_type='IntegerArrayConstraintValue',
                ):
        """
        :type  values: :class:`list` of :class:`long` or ``None``
        :param values: Array of integer values format: int32
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ConstraintValue.RESOURCE_TYPE_STRINGARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_CIDRARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_INTEGERARRAYCONSTRAINTVALUE`
        """
        self.values = values
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

IntegerArrayConstraintValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.integer_array_constraint_value', {
        'values': type.OptionalType(type.ListType(type.IntegerType())),
        'resource_type': type.StringType(),
    },
    IntegerArrayConstraintValue,
    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 InterfaceArpProxy(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',
                            'arp_proxy_entries': 'arp_proxy_entries',
                            'interface_path': 'interface_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 arp_proxy_entries=None,
                 interface_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_: 
        :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  arp_proxy_entries: :class:`list` of :class:`PolicyArpProxyEntry` or ``None``
        :param arp_proxy_entries: Array of ARP proxy table entries
            This 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 of gateway 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.
        """
        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.arp_proxy_entries = arp_proxy_entries
        self.interface_path = interface_path
        VapiStruct.__init__(self)


InterfaceArpProxy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_arp_proxy', {
        '_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()),
        'arp_proxy_entries': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyArpProxyEntry'))),
        'interface_path': type.OptionalType(type.StringType()),
    },
    InterfaceArpProxy,
    False,
    None))



class InterfaceArpProxyCsvEntry(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'arp_proxy_ip': 'arp_proxy_ip',
                            'interface_path': 'interface_path',
                            'service_id': 'service_id',
                            }

    def __init__(self,
                 arp_proxy_ip=None,
                 interface_path=None,
                 service_id=None,
                ):
        """
        :type  arp_proxy_ip: :class:`str` or ``None``
        :param arp_proxy_ip: ARP proxy information for a service with 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  interface_path: :class:`str` or ``None``
        :param interface_path: Policy path of gateway 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  service_id: :class:`str` or ``None``
        :param service_id: Identifier of connected service on 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.arp_proxy_ip = arp_proxy_ip
        self.interface_path = interface_path
        self.service_id = service_id
        VapiStruct.__init__(self)


InterfaceArpProxyCsvEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_arp_proxy_csv_entry', {
        'arp_proxy_ip': type.OptionalType(type.StringType()),
        'interface_path': type.OptionalType(type.StringType()),
        'service_id': type.OptionalType(type.StringType()),
    },
    InterfaceArpProxyCsvEntry,
    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_: 
        :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 InterfaceNeighborProperties(VapiStruct):
    """
    Interface neighbor properties

    .. 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',
                            'ifindex': 'ifindex',
                            'mac': 'mac',
                            'name': 'name',
                            'neighbors': 'neighbors',
                            }

    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,
                 ifindex=None,
                 mac=None,
                 name=None,
                 neighbors=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  ifindex: :class:`long` or ``None``
        :param ifindex: Interface index format: int64
            This 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: :class:`str` or ``None``
        :param mac: Interface 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  name: :class:`str` or ``None``
        :param name: Interface 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  neighbors: :class:`list` of :class:`NeighborProperties` or ``None``
        :param neighbors: Neighbor 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.ifindex = ifindex
        self.mac = mac
        self.name = name
        self.neighbors = neighbors
        VapiStruct.__init__(self)


InterfaceNeighborProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_neighbor_properties', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'ifindex': type.OptionalType(type.IntegerType()),
        'mac': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'neighbors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NeighborProperties'))),
    },
    InterfaceNeighborProperties,
    False,
    None))



class InterfaceNeighborPropertyListResult(VapiStruct):
    """
    Interface neighbor property 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_: 
        :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:`InterfaceNeighborProperties` or ``None``
        :param results: Interface neighbor 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)


InterfaceNeighborPropertyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_neighbor_property_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__, 'InterfaceNeighborProperties'))),
    },
    InterfaceNeighborPropertyListResult,
    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 IntervalSampling(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IntervalSampling"
    """
    Identifier denoting this class, when it is used 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 = {
                            'sampling_interval': 'sampling_interval',
                            'sampling_type': 'sampling_type',
                            }

    def __init__(self,
                 sampling_interval=None,
                 sampling_type='IntervalSampling',
                ):
        """
        :type  sampling_interval: :class:`long` or ``None``
        :param sampling_interval: Time interval in ms between two sampling actions. format: int64
        :type  sampling_type: :class:`str`
        :param sampling_type: Possible values are: 
            
            * :attr:`SamplingArgument.SAMPLING_TYPE_FIRSTNSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_PACKETNUMBERSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_INTERVALSAMPLING`
            
            Sampling type
        """
        self.sampling_interval = sampling_interval
        self._sampling_type = sampling_type
        VapiStruct.__init__(self)

    @property
    def sampling_type(self):
        """
        Return the discriminator value
        """
        return self._sampling_type

IntervalSampling._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interval_sampling', {
        'sampling_interval': type.OptionalType(type.IntegerType()),
        'sampling_type': type.StringType(),
    },
    IntervalSampling,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'allocated_ip': 'allocated_ip',
                            'allocation_ip': 'allocation_ip',
                            'sync_realization': 'sync_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 allocated_ip=None,
                 allocation_ip=None,
                 sync_realization=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  allocated_ip: :class:`str` or ``None``
        :param allocated_ip: Represents IP Address that is allocated from a pool in a NSX+
            instance. 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  allocation_ip: :class:`str` or ``None``
        :param allocation_ip: Address that is allocated from pool format: ip
        :type  sync_realization: :class:`bool` or ``None``
        :param sync_realization: Realization of intent will be called synchronously
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.allocated_ip = allocated_ip
        self.allocation_ip = allocation_ip
        self.sync_realization = sync_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'allocated_ip': type.OptionalType(type.StringType()),
        'allocation_ip': type.OptionalType(type.StringType()),
        'sync_realization': type.OptionalType(type.BooleanType()),
    },
    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_: 
        :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.
    """
    IP_ADDRESS_TYPE_IPV4 = "IPV4"
    """


    """
    IP_ADDRESS_TYPE_IPV6 = "IPV6"
    """


    """
    VISIBILITY_PRIVATE = "PRIVATE"
    """


    """
    VISIBILITY_EXTERNAL = "EXTERNAL"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'available_allocation_size': 'available_allocation_size',
                            'cidr': 'cidr',
                            'ip_address_type': 'ip_address_type',
                            'sync_realization': 'sync_realization',
                            'visibility': 'visibility',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 available_allocation_size=None,
                 cidr=None,
                 ip_address_type=None,
                 sync_realization=None,
                 visibility=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_allocation_size: :class:`str` or ``None``
        :param available_allocation_size: This size indicates available allocation size of an IpAddressBlock.
            Note: This field is deprecated. Please use below GET API instead.
            https://<policy-mgr>/policy/api/v1/infra/ip-blocks/Finance-block/usage

            .. deprecated:: unknown
        :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
        :type  ip_address_type: :class:`str` or ``None``
        :param ip_address_type: Possible values are: 
            
            * :attr:`IpAddressBlock.IP_ADDRESS_TYPE_IPV4`
            * :attr:`IpAddressBlock.IP_ADDRESS_TYPE_IPV6`
            
            This indicates the type of 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  sync_realization: :class:`bool` or ``None``
        :param sync_realization: If this property is set to true, realization of intent will be
            called synchronously
        :type  visibility: :class:`str` or ``None``
        :param visibility: Possible values are: 
            
            * :attr:`IpAddressBlock.VISIBILITY_PRIVATE`
            * :attr:`IpAddressBlock.VISIBILITY_EXTERNAL`
            
            Represents visibility or scope of IpAddressBlock and expected
            consumption of IpAddressBlock with same scope. It is empty by
            default. Visibility cannot be updated once block is associated with
            other intents. If visibility is populated then sync_realization
            will be 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.available_allocation_size = available_allocation_size
        self.cidr = cidr
        self.ip_address_type = ip_address_type
        self.sync_realization = sync_realization
        self.visibility = visibility
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_allocation_size': type.OptionalType(type.StringType()),
        'cidr': type.OptionalType(type.StringType()),
        'ip_address_type': type.OptionalType(type.StringType()),
        'sync_realization': type.OptionalType(type.BooleanType()),
        'visibility': 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_: 
        :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 IpAddressBlockUsage(VapiStruct):
    """
    Shows used IP ranges and available IP ranges statistics of an
    IpAddressBlock.

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



    _canonical_to_pep_names = {
                            'available_ip_ranges': 'available_ip_ranges',
                            'used_ip_ranges': 'used_ip_ranges',
                            }

    def __init__(self,
                 available_ip_ranges=None,
                 used_ip_ranges=None,
                ):
        """
        :type  available_ip_ranges: :class:`list` of :class:`str` or ``None``
        :param available_ip_ranges: This represents available ip ranges of an IpAddressBlock.
            This 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_ip_ranges: :class:`list` of :class:`str` or ``None``
        :param used_ip_ranges: This represents used ip ranges of an IpAddressBlock.
            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.available_ip_ranges = available_ip_ranges
        self.used_ip_ranges = used_ip_ranges
        VapiStruct.__init__(self)


IpAddressBlockUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_block_usage', {
        'available_ip_ranges': type.OptionalType(type.ListType(type.StringType())),
        'used_ip_ranges': type.OptionalType(type.ListType(type.StringType())),
    },
    IpAddressBlockUsage,
    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.
    """
    IP_ADDRESS_TYPE_IPV4 = "IPV4"
    """


    """
    IP_ADDRESS_TYPE_IPV6 = "IPV6"
    """


    """
    IP_ADDRESS_TYPE_DUAL = "DUAL"
    """


    """
    VISIBILITY_PRIVATE = "PRIVATE"
    """


    """
    VISIBILITY_PUBLIC = "PUBLIC"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'check_overlap_with_existing_pools': 'check_overlap_with_existing_pools',
                            'ip_address_type': 'ip_address_type',
                            'ip_release_delay': 'ip_release_delay',
                            'pool_usage': 'pool_usage',
                            'sync_realization': 'sync_realization',
                            'visibility': 'visibility',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 check_overlap_with_existing_pools=None,
                 ip_address_type=None,
                 ip_release_delay=None,
                 pool_usage=None,
                 sync_realization=None,
                 visibility=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  check_overlap_with_existing_pools: :class:`bool` or ``None``
        :param check_overlap_with_existing_pools: If an existing IpAddressPool is found that overlaps with the given
            IpAddressPool, then a validation error would be thrown while
            realization. It is false by default.
        :type  ip_address_type: :class:`str` or ``None``
        :param ip_address_type: Possible values are: 
            
            * :attr:`IpAddressPool.IP_ADDRESS_TYPE_IPV4`
            * :attr:`IpAddressPool.IP_ADDRESS_TYPE_IPV6`
            * :attr:`IpAddressPool.IP_ADDRESS_TYPE_DUAL`
            
            Represents the type of IP addresses present inside the pool.
            This 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
        :type  pool_usage: :class:`PolicyPoolUsage` or ``None``
        :param pool_usage: 
        :type  sync_realization: :class:`bool` or ``None``
        :param sync_realization: Realization of intent will be called synchronously
        :type  visibility: :class:`str` or ``None``
        :param visibility: Possible values are: 
            
            * :attr:`IpAddressPool.VISIBILITY_PRIVATE`
            * :attr:`IpAddressPool.VISIBILITY_PUBLIC`
            
            Represents visibility or scope of IpAddressPool and expected
            consumption of IpAddressPool with same scope. Visibility cannot be
            updated once pool is created. It is empty by default.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.check_overlap_with_existing_pools = check_overlap_with_existing_pools
        self.ip_address_type = ip_address_type
        self.ip_release_delay = ip_release_delay
        self.pool_usage = pool_usage
        self.sync_realization = sync_realization
        self.visibility = visibility
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'check_overlap_with_existing_pools': type.OptionalType(type.BooleanType()),
        'ip_address_type': type.OptionalType(type.StringType()),
        'ip_release_delay': type.OptionalType(type.IntegerType()),
        'pool_usage': type.OptionalType(type.ReferenceType(__name__, 'PolicyPoolUsage')),
        'sync_realization': type.OptionalType(type.BooleanType()),
        'visibility': type.OptionalType(type.StringType()),
    },
    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 address space is available in the specified
    IpAddressBlock, the system automatically configures subnet range.
    IpAddressBlock available size is calculated based on the size of
    IpAddressPoolBlockSubnet intent object and not on realized. The user should
    delete failed IpAddressPoolBlockSubnet to utilize IpAddressBlock size
    correctly.

    .. 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 = {
                            'allocation_range': 'allocation_range',
                            'auto_assign_gateway': 'auto_assign_gateway',
                            'broadcast_address': 'broadcast_address',
                            'cidr': 'cidr',
                            'gateway_address': 'gateway_address',
                            'ip_block_path': 'ip_block_path',
                            'network_address': 'network_address',
                            'size': 'size',
                            'start_ip': 'start_ip',
                            'subnet_size': 'subnet_size',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'sync_realization': 'sync_realization',
                            }

    def __init__(self,
                 allocation_range=None,
                 auto_assign_gateway=None,
                 broadcast_address=None,
                 cidr=None,
                 gateway_address=None,
                 ip_block_path=None,
                 network_address=None,
                 size=None,
                 start_ip=None,
                 subnet_size=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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 sync_realization=None,
                ):
        """
        :type  allocation_range: :class:`long` or ``None``
        :param allocation_range: Allocation range is used to limit subnet range to be used for
            allocations of IPs from subnet. This must be less than or equal to
            subnet size. Instead of taking whole subnet range for allocations,
            user can limit the range used for allocation of IPs. This is very
            useful in IPv6 case where big subnets needs to be carved out from
            IpAddressBlock but whole subnet range will not be needed for IP
            allocations. Eg: subnet range is
            (2002:2345::0001-2002:2345::7fff:ffff): subnet_start_ip:
            2002:2345::0001-2002:2345 subnet_end_ip: 2002:2345::7fff:ffff User
            would like to use only 128 IPs for allocations. allocation_range:
            128 allocation range used (2002:2345::0001-2002:2345::7fff:007f):
            allocation_range_start_ip: 2002:2345::0001-2002:2345
            allocation_range_end_ip: 2002:2345::7fff:007f format: int64
        :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  broadcast_address: :class:`str` or ``None``
        :param broadcast_address: Represents Broadcast address of the subnet in a NSX+ 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  cidr: :class:`str` or ``None``
        :param cidr: Represents network address and the prefix length in a NSX+ instance
            which will be associated with a layer-2 broadcast domain. 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  gateway_address: :class:`str` or ``None``
        :param gateway_address: Represents Gateway address of the subnet in a NSX+ 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  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  network_address: :class:`str` or ``None``
        :param network_address: Represents Network address of the subnet in a NSX+ 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  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. Please use
            subnet_size instead as integer type cannot hold big values needs
            for IPv6. format: int64

            .. deprecated:: unknown
        :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  subnet_size: :class:`str` or ``None``
        :param subnet_size: The size parameter is required for subnet creation. It must be
            specified during creation but cannot be changed later.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  sync_realization: :class:`bool` or ``None``
        :param sync_realization: Realization of intent will be called synchronously
        """
        self.allocation_range = allocation_range
        self.auto_assign_gateway = auto_assign_gateway
        self.broadcast_address = broadcast_address
        self.cidr = cidr
        self.gateway_address = gateway_address
        self.ip_block_path = ip_block_path
        self.network_address = network_address
        self.size = size
        self.start_ip = start_ip
        self.subnet_size = subnet_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.sync_realization = sync_realization
        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', {
        'allocation_range': type.OptionalType(type.IntegerType()),
        'auto_assign_gateway': type.OptionalType(type.BooleanType()),
        'broadcast_address': type.OptionalType(type.StringType()),
        'cidr': type.OptionalType(type.StringType()),
        'gateway_address': type.OptionalType(type.StringType()),
        'ip_block_path': type.OptionalType(type.StringType()),
        'network_address': type.OptionalType(type.StringType()),
        'size': type.OptionalType(type.IntegerType()),
        'start_ip': type.OptionalType(type.StringType()),
        'subnet_size': 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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'sync_realization': 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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'sync_realization': 'sync_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 sync_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  sync_realization: :class:`bool` or ``None``
        :param sync_realization: Realization of intent will be called synchronously
        """
        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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.sync_realization = sync_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'sync_realization': 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'sync_realization': 'sync_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 sync_realization=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  sync_realization: :class:`bool` or ``None``
        :param sync_realization: Realization of intent will be called synchronously
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.sync_realization = sync_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'sync_realization': 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_: 
        :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 IpAssignmentSpec(VapiStruct):
    """
    Abstract base type for specification of IPs to be used with host switch
    virtual tunnel endpoints

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IpAssignmentSpec"
    """
    Identifier denoting this class, when it is used 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_STATICIPPOOLSPEC = "StaticIpPoolSpec"
    """


    """
    RESOURCE_TYPE_STATICIPLISTSPEC = "StaticIpListSpec"
    """


    """
    RESOURCE_TYPE_ASSIGNEDBYDHCP = "AssignedByDhcp"
    """


    """
    RESOURCE_TYPE_STATICIPMACLISTSPEC = "StaticIpMacListSpec"
    """


    """
    RESOURCE_TYPE_NOIPV4 = "NoIpv4"
    """


    """



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

    def __init__(self,
                 resource_type='IpAssignmentSpec',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPPOOLSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCP`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPMACLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_NOIPV4`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class IpInfo(VapiStruct):
    """
    Only support IP address or subnet. Its type can be of IPv4 or IPv6. It will
    be converted to subnet when netmask is specified(e.g., 192.168.1.3/24 =>
    192.168.1.0/24, 2008:12:12:12::2/64 => 2008:12:12:12::/64). This type is
    deprecated. Please use the type NetworkInfo instead.

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



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

    def __init__(self,
                 dst_ip=None,
                 src_ip=None,
                ):
        """
        :type  dst_ip: :class:`str` or ``None``
        :param dst_ip: The destination IP can be an IP address or a subnet. format:
            address-or-block-or-range
        :type  src_ip: :class:`str` or ``None``
        :param src_ip: The source IP can be an IP address or a subnet. format:
            address-or-block-or-range
        """
        self.dst_ip = dst_ip
        self.src_ip = src_ip
        VapiStruct.__init__(self)


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



class IpMacPair(VapiStruct):
    """
    IP and MAC pair.

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



    _canonical_to_pep_names = {
                            'ip': 'ip',
                            'mac': 'mac',
                            }

    def __init__(self,
                 ip=None,
                 mac=None,
                ):
        """
        :type  ip: :class:`str` or ``None``
        :param ip: IP address format: ip
        :type  mac: :class:`str` or ``None``
        :param mac: MAC address format: mac-address
        """
        self.ip = ip
        self.mac = mac
        VapiStruct.__init__(self)


IpMacPair._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_mac_pair', {
        'ip': type.OptionalType(type.StringType()),
        'mac': type.OptionalType(type.StringType()),
    },
    IpMacPair,
    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_: 
        :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: 
        :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',
                            'policy_id': 'policy_id',
                            '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,
                 policy_id=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  policy_id: :class:`str` or ``None``
        :param policy_id: Policy UUID of IPSec 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  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.policy_id = policy_id
        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()),
        'policy_id': 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 Ipv6AssignmentSpec(VapiStruct):
    """
    Abstract base type for specification of IPv6 IPs to be used with host
    switch virtual tunnel endpoints

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "Ipv6AssignmentSpec"
    """
    Identifier denoting this class, when it is used 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_STATICIPV6POOLSPEC = "StaticIpv6PoolSpec"
    """


    """
    RESOURCE_TYPE_STATICIPV6LISTSPEC = "StaticIpv6ListSpec"
    """


    """
    RESOURCE_TYPE_ASSIGNEDBYDHCPV6 = "AssignedByDhcpv6"
    """


    """
    RESOURCE_TYPE_STATICIPV6MACLISTSPEC = "StaticIpv6MacListSpec"
    """


    """
    RESOURCE_TYPE_ASSIGNEDBYAUTOCONF = "AssignedByAutoConf"
    """


    """
    RESOURCE_TYPE_NOIPV6 = "NoIpv6"
    """


    """



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

    def __init__(self,
                 resource_type='Ipv6AssignmentSpec',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6POOLSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6LISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCPV6`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6MACLISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYAUTOCONF`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_NOIPV6`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

Ipv6AssignmentSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv6_assignment_spec', {
        'resource_type': type.StringType(),
    },
    Ipv6AssignmentSpec,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 Ipv6MacPair(VapiStruct):
    """
    IPv6 and MAC pair.

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



    _canonical_to_pep_names = {
                            'ipv6': 'ipv6',
                            'mac': 'mac',
                            }

    def __init__(self,
                 ipv6=None,
                 mac=None,
                ):
        """
        :type  ipv6: :class:`str` or ``None``
        :param ipv6: IP address format: ipv6
        :type  mac: :class:`str` or ``None``
        :param mac: MAC address format: mac-address
        """
        self.ipv6 = ipv6
        self.mac = mac
        VapiStruct.__init__(self)


Ipv6MacPair._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv6_mac_pair', {
        'ipv6': type.OptionalType(type.StringType()),
        'mac': type.OptionalType(type.StringType()),
    },
    Ipv6MacPair,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dns_config': 'dns_config',
                            'ndra_advertised_route': 'ndra_advertised_route',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dns_config=None,
                 ndra_advertised_route=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :type  ndra_advertised_route: :class:`list` of :class:`NDRAAdvertisedRoute` or ``None``
        :param ndra_advertised_route: Route advertised in NDRAProfile.
        :type  ra_config: :class:`RAConfig` or ``None``
        :param ra_config: 
        :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. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.ndra_advertised_route = ndra_advertised_route
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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')),
        'ndra_advertised_route': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NDRAAdvertisedRoute'))),
        '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_: 
        :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 IssuerSerialNumber(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'issuer': 'issuer',
                            'serial_numbers': 'serial_numbers',
                            }

    def __init__(self,
                 issuer=None,
                 serial_numbers=None,
                ):
        """
        :type  issuer: :class:`str` or ``None``
        :param issuer: Issuer Distinguished Name of the revoked certificates.
        :type  serial_numbers: :class:`list` of :class:`str` or ``None``
        :param serial_numbers: List of Certificate Serial Numbers issued by the specified issuers.
        """
        self.issuer = issuer
        self.serial_numbers = serial_numbers
        VapiStruct.__init__(self)


IssuerSerialNumber._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.issuer_serial_number', {
        'issuer': type.OptionalType(type.StringType()),
        'serial_numbers': type.OptionalType(type.ListType(type.StringType())),
    },
    IssuerSerialNumber,
    False,
    None))



class KeyStoreInfo(VapiStruct):
    """
    Key Store information about the url alias or datasource.

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



    _canonical_to_pep_names = {
                            'keystore': 'keystore',
                            'keystore_alias': 'keystore_alias',
                            'keystore_phrase': 'keystore_phrase',
                            'truststore': 'truststore',
                            }

    def __init__(self,
                 keystore=None,
                 keystore_alias=None,
                 keystore_phrase=None,
                 truststore=None,
                ):
        """
        :type  keystore: :class:`str` or ``None``
        :param keystore: A location of the keystor file which stores private key and
            identity certificates that will be presented to both parties
            (server or client) for verification.
        :type  keystore_alias: :class:`str` or ``None``
        :param keystore_alias: Its an alias specified when an entity is added to the keystore.
        :type  keystore_phrase: :class:`str` or ``None``
        :param keystore_phrase: A location of the key store pass phrase file.
        :type  truststore: :class:`str` or ``None``
        :param truststore: A location of the trust store file which stores the certificate
            from CA that verify the certificate presented by the server in SSL
            connection.
        """
        self.keystore = keystore
        self.keystore_alias = keystore_alias
        self.keystore_phrase = keystore_phrase
        self.truststore = truststore
        VapiStruct.__init__(self)


KeyStoreInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.key_store_info', {
        'keystore': type.OptionalType(type.StringType()),
        'keystore_alias': type.OptionalType(type.StringType()),
        'keystore_phrase': type.OptionalType(type.StringType()),
        'truststore': type.OptionalType(type.StringType()),
    },
    KeyStoreInfo,
    False,
    None))



class KeyValue(VapiStruct):
    """


    .. 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 name.
        :type  value: :class:`str` or ``None``
        :param value: Key value.
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


KeyValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.key_value', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    KeyValue,
    False,
    None))



class KubeconfigInfo(VapiStruct):
    """
    Infromation about kubeconfig file.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bundle_id': 'bundle_id',
                            'cluster': 'cluster',
                            'connection_status': 'connection_status',
                            'current_context': 'current_context',
                            'expiry': 'expiry',
                            'name': 'name',
                            'namespace': 'namespace',
                            'server': 'server',
                            'user': 'user',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bundle_id=None,
                 cluster=None,
                 connection_status=None,
                 current_context=None,
                 expiry=None,
                 name=None,
                 namespace=None,
                 server=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  bundle_id: :class:`str` or ``None``
        :param bundle_id: Bundle id of uploaded file.
        :type  cluster: :class:`str` or ``None``
        :param cluster: Kubernetes cluster to be used for deployment.
        :type  connection_status: :class:`bool` or ``None``
        :param connection_status: Show whether connection to Kubernetes cluster is available or not.
        :type  current_context: :class:`str` or ``None``
        :param current_context: Kubernetes cluster current context to be used for NSX Application
            Platform deployment.
        :type  expiry: :class:`long` or ``None``
        :param expiry: Date and time when Kubernetes cluster user token is going to
            expire. format: int64
        :type  name: :class:`str` or ``None``
        :param name: Kubernetes cluster kubeconfig file name
        :type  namespace: :class:`str` or ``None``
        :param namespace: Kubernetes cluster namespace to be used for NSX Application
            Platform deployment.
        :type  server: :class:`str` or ``None``
        :param server: Kubernetes api server url.
        :type  user: :class:`str` or ``None``
        :param user: User name to access Kubernetes 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.bundle_id = bundle_id
        self.cluster = cluster
        self.connection_status = connection_status
        self.current_context = current_context
        self.expiry = expiry
        self.name = name
        self.namespace = namespace
        self.server = server
        self.user = user
        VapiStruct.__init__(self)


KubeconfigInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.kubeconfig_info', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'bundle_id': type.OptionalType(type.StringType()),
        'cluster': type.OptionalType(type.StringType()),
        'connection_status': type.OptionalType(type.BooleanType()),
        'current_context': type.OptionalType(type.StringType()),
        'expiry': type.OptionalType(type.IntegerType()),
        'name': type.OptionalType(type.StringType()),
        'namespace': type.OptionalType(type.StringType()),
        'server': type.OptionalType(type.StringType()),
        'user': type.OptionalType(type.StringType()),
    },
    KubeconfigInfo,
    False,
    None))



class KubernetesToolsInfo(VapiStruct):
    """
    Information about Kubernetes tools like kubectl client and server versions.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'client_version': 'client_version',
                            'compatible': 'compatible',
                            'server_version': 'server_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 client_version=None,
                 compatible=None,
                 server_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  client_version: :class:`str` or ``None``
        :param client_version: kubectl client version.
        :type  compatible: :class:`bool` or ``None``
        :param compatible: Show compatibility flag, whether kubectl client version is
            compatible with Kubernetes api server version. kubectl is supported
            within one minor version (older or newer) of kube-apiserver.
        :type  server_version: :class:`str` or ``None``
        :param server_version: Kubernetes api server version.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.client_version = client_version
        self.compatible = compatible
        self.server_version = server_version
        VapiStruct.__init__(self)


KubernetesToolsInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.kubernetes_tools_info', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'client_version': type.OptionalType(type.StringType()),
        'compatible': type.OptionalType(type.BooleanType()),
        'server_version': type.OptionalType(type.StringType()),
    },
    KubernetesToolsInfo,
    False,
    None))



class L2AutoRD(VapiStruct):
    """
    Layer 2 Auto assigned Route Distinguisher

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



    _canonical_to_pep_names = {
                            'l2_auto_rd': 'l2_auto_rd',
                            'l2_vni': 'l2_vni',
                            }

    def __init__(self,
                 l2_auto_rd=None,
                 l2_vni=None,
                ):
        """
        :type  l2_auto_rd: :class:`str` or ``None``
        :param l2_auto_rd: Layer 2 auto assigned route distinghusher
        :type  l2_vni: :class:`str` or ``None``
        :param l2_vni: Layer 2 Virtual Network Interface
        """
        self.l2_auto_rd = l2_auto_rd
        self.l2_vni = l2_vni
        VapiStruct.__init__(self)


L2AutoRD._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_auto_RD', {
        'l2_auto_rd': type.OptionalType(type.StringType()),
        'l2_vni': type.OptionalType(type.StringType()),
    },
    L2AutoRD,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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.

            .. deprecated:: unknown
        :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: 
        :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: 
        :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: 
        """
        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 L2TcpMaxSegmentSizeClamping(VapiStruct):
    """
    TCP MSS Clamping Direction and Value.

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


    """
    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:`L2TcpMaxSegmentSizeClamping.DIRECTION_NONE`
            * :attr:`L2TcpMaxSegmentSizeClamping.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 108 to 8852. format: int64
        """
        self.direction = direction
        self.max_segment_size = max_segment_size
        VapiStruct.__init__(self)


L2TcpMaxSegmentSizeClamping._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_tcp_max_segment_size_clamping', {
        'direction': type.OptionalType(type.StringType()),
        'max_segment_size': type.OptionalType(type.IntegerType()),
    },
    L2TcpMaxSegmentSizeClamping,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': 'enabled',
                            'tcp_mss_clamping': 'tcp_mss_clamping',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled=None,
                 tcp_mss_clamping=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  tcp_mss_clamping: :class:`L2TcpMaxSegmentSizeClamping` or ``None``
        :param tcp_mss_clamping: 
        :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: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        self.tcp_mss_clamping = tcp_mss_clamping
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'tcp_mss_clamping': type.OptionalType(type.ReferenceType(__name__, 'L2TcpMaxSegmentSizeClamping')),
        '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_: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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: 
        :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: 
        :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_DIGEST_ALGORITHMS_SHA2_384 = "SHA2_384"
    """


    """
    IKE_DIGEST_ALGORITHMS_SHA2_512 = "SHA2_512"
    """


    """
    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_DIGEST_ALGORITHMS_SHA2_384 = "SHA2_384"
    """


    """
    TUNNEL_DIGEST_ALGORITHMS_SHA2_512 = "SHA2_512"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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`
            * :attr:`L3Vpn.IKE_DIGEST_ALGORITHMS_SHA2_384`
            * :attr:`L3Vpn.IKE_DIGEST_ALGORITHMS_SHA2_512`
            
            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: 
            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`
            * :attr:`L3Vpn.TUNNEL_DIGEST_ALGORITHMS_SHA2_384`
            * :attr:`L3Vpn.TUNNEL_DIGEST_ALGORITHMS_SHA2_512`
            
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 L7AccessAttributes(VapiStruct):
    """
    Supported Attribute Keys are APP_ID, URL_CATEGORY, URL_REPUTATION,
    CUSTOM_URL

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


    """
    ATTRIBUTE_SOURCE_CUSTOM = "CUSTOM"
    """


    """
    DATATYPE_STRING = "STRING"
    """


    """
    KEY_APP_ID = "APP_ID"
    """


    """
    KEY_DOMAIN_NAME = "DOMAIN_NAME"
    """


    """
    KEY_URL_CATEGORY = "URL_CATEGORY"
    """


    """
    KEY_URL_REPUTATION = "URL_REPUTATION"
    """


    """
    KEY_CUSTOM_URL = "CUSTOM_URL"
    """


    """



    _canonical_to_pep_names = {
                            'attribute_source': 'attribute_source',
                            'custom_url_partial_match': 'custom_url_partial_match',
                            'datatype': 'datatype',
                            'description': 'description',
                            'isALGType': 'is_alg_type',
                            'key': 'key',
                            'metadata': 'metadata',
                            'sub_attributes': 'sub_attributes',
                            'value': 'value',
                            }

    def __init__(self,
                 attribute_source=None,
                 custom_url_partial_match=None,
                 datatype=None,
                 description=None,
                 is_alg_type=None,
                 key=None,
                 metadata=None,
                 sub_attributes=None,
                 value=None,
                ):
        """
        :type  attribute_source: :class:`str` or ``None``
        :param attribute_source: Possible values are: 
            
            * :attr:`L7AccessAttributes.ATTRIBUTE_SOURCE_SYSTEM`
            * :attr:`L7AccessAttributes.ATTRIBUTE_SOURCE_CUSTOM`
            
            Source of attribute value i.e whether system defined or custom
            value
        :type  custom_url_partial_match: :class:`bool` or ``None``
        :param custom_url_partial_match: True value for this flag will be treated as a partial match for
            custom url
        :type  datatype: :class:`str` or ``None``
        :param datatype: Possible values are: 
            
            * :attr:`L7AccessAttributes.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:`L7AccessAttributes.KEY_APP_ID`
            * :attr:`L7AccessAttributes.KEY_DOMAIN_NAME`
            * :attr:`L7AccessAttributes.KEY_URL_CATEGORY`
            * :attr:`L7AccessAttributes.KEY_URL_REPUTATION`
            * :attr:`L7AccessAttributes.KEY_CUSTOM_URL`
            
            URL_Reputation is currently not available. Please do not use it in
            Attribute Key while creating context profile
        :type  metadata: :class:`list` of :class:`ContextProfileAttributesMetadata` or ``None``
        :param metadata: This is optional part that can hold additional data about the
            attribute key/values. Example - For URL CATEGORY key , it specified
            super category for url category value. This is generic array and
            can hold multiple meta information about key/values in future
        :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.attribute_source = attribute_source
        self.custom_url_partial_match = custom_url_partial_match
        self.datatype = datatype
        self.description = description
        self.is_alg_type = is_alg_type
        self.key = key
        self.metadata = metadata
        self.sub_attributes = sub_attributes
        self.value = value
        VapiStruct.__init__(self)


L7AccessAttributes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l7_access_attributes', {
        'attribute_source': type.OptionalType(type.StringType()),
        'custom_url_partial_match': type.OptionalType(type.BooleanType()),
        'datatype': type.OptionalType(type.StringType()),
        'description': type.OptionalType(type.StringType()),
        'isALGType': type.OptionalType(type.BooleanType()),
        'key': type.OptionalType(type.StringType()),
        'metadata': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ContextProfileAttributesMetadata'))),
        'sub_attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicySubAttributes'))),
        'value': type.OptionalType(type.ListType(type.StringType())),
    },
    L7AccessAttributes,
    False,
    None))



class L7AccessEntry(VapiStruct):
    """
    An entity that encapsulates attributes like APP_ID, CUSTOM_URL,
    URL_CATEGORY, URL_REPUTATION.

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


    """
    ACTION_REJECT = "REJECT"
    """


    """
    ACTION_REJECT_WITH_RESPONSE = "REJECT_WITH_RESPONSE"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'attributes': 'attributes',
                            'disabled': 'disabled',
                            'logged': 'logged',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 attributes=None,
                 disabled=None,
                 logged=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`L7AccessEntry.ACTION_ALLOW`
            * :attr:`L7AccessEntry.ACTION_REJECT`
            * :attr:`L7AccessEntry.ACTION_REJECT_WITH_RESPONSE`
            
            The action to be applied to all the services.
        :type  attributes: :class:`list` of :class:`L7AccessAttributes` or ``None``
        :param attributes: Property containing attributes/sub-attributes for Policy L7 Access
            Profile.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to deactivate the entry. Default is activated.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to activate packet logging. Default is deactivated.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: Determines the order of the entry in this profile. 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. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.attributes = attributes
        self.disabled = disabled
        self.logged = logged
        self.sequence_number = sequence_number
        VapiStruct.__init__(self)


L7AccessEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l7_access_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L7AccessAttributes'))),
        'disabled': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
    },
    L7AccessEntry,
    False,
    None))



class L7AccessEntryListResult(VapiStruct):
    """
    Paged Collection of l7 profile 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_: 
        :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:`L7AccessEntry` or ``None``
        :param results: L7 access Entry 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)


L7AccessEntryListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l7_access_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__, 'L7AccessEntry'))),
    },
    L7AccessEntryListResult,
    False,
    None))



class L7AccessProfile(VapiStruct):
    """
    An entity that encapsulates multiple L7 access profile entries. The entity
    wil be consumed in firewall rules and can be added in new tuple called
    profile in firewall rules. One of either Context Profile or L7 Access
    Profile can be used in firewall rule.

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


    """
    DEFAULT_ACTION_REJECT = "REJECT"
    """


    """
    DEFAULT_ACTION_REJECT_WITH_RESPONSE = "REJECT_WITH_RESPONSE"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'default_action': 'default_action',
                            'default_action_logged': 'default_action_logged',
                            'entry_count': 'entry_count',
                            'l7_access_entries': 'l7_access_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 default_action=None,
                 default_action_logged=None,
                 entry_count=None,
                 l7_access_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_action: :class:`str` or ``None``
        :param default_action: Possible values are: 
            
            * :attr:`L7AccessProfile.DEFAULT_ACTION_ALLOW`
            * :attr:`L7AccessProfile.DEFAULT_ACTION_REJECT`
            * :attr:`L7AccessProfile.DEFAULT_ACTION_REJECT_WITH_RESPONSE`
            
            The action to be applied to all the services.
        :type  default_action_logged: :class:`bool` or ``None``
        :param default_action_logged: Flag to activate packet logging. Default is deactivated.
        :type  entry_count: :class:`long` or ``None``
        :param entry_count: The count of entries in the L7 profile. 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  l7_access_entries: :class:`list` of :class:`L7AccessEntry` or ``None``
        :param l7_access_entries: Property containing L7 access entries for Policy L7 Access 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.default_action = default_action
        self.default_action_logged = default_action_logged
        self.entry_count = entry_count
        self.l7_access_entries = l7_access_entries
        VapiStruct.__init__(self)


L7AccessProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l7_access_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_action': type.OptionalType(type.StringType()),
        'default_action_logged': type.OptionalType(type.BooleanType()),
        'entry_count': type.OptionalType(type.IntegerType()),
        'l7_access_entries': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L7AccessEntry'))),
    },
    L7AccessProfile,
    False,
    None))



class L7AccessProfileListResult(VapiStruct):
    """
    Paged Collection of Policy L7 Access 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_: 
        :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:`L7AccessProfile` or ``None``
        :param results: Policy L7 Access 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)


L7AccessProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l7_access_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__, 'L7AccessProfile'))),
    },
    L7AccessProfileListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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. LBHttpProfile is deprecated as
            NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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. LBClientSslProfile is deprecated as NSX-T Load Balancer
    is deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 activated by
            default. SSLv2, SSLv3, and TLS1.0 are supported, but deactivated 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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. LBClientSslProfileBinding is deprecated as
    NSX-T Load Balancer is deprecated.

    .. 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_: 
        :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. LBCookiePersistenceProfile is deprecated as
    NSX-T Load Balancer is deprecated.

    .. 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_httponly': 'cookie_httponly',
                            'cookie_mode': 'cookie_mode',
                            'cookie_name': 'cookie_name',
                            'cookie_path': 'cookie_path',
                            'cookie_secure': 'cookie_secure',
                            '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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_httponly=None,
                 cookie_mode=None,
                 cookie_name=None,
                 cookie_path=None,
                 cookie_secure=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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_httponly: :class:`bool` or ``None``
        :param cookie_httponly: If cookie httponly flag is true, it prevents a script running in
            the browser from accessing the cookie. Only available for insert
            mode.
        :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_secure: :class:`bool` or ``None``
        :param cookie_secure: If cookie secure flag is true, it prevents the browser from sending
            a cookie over http. The cookie is sent only over https. Only
            available for insert mode.
        :type  cookie_time: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param cookie_time: 
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
            LBCookiePersistenceProfile and LBGenericPersistenceProfile are
            deprecated as NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_httponly = cookie_httponly
        self.cookie_mode = cookie_mode
        self.cookie_name = cookie_name
        self.cookie_path = cookie_path
        self.cookie_secure = cookie_secure
        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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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_httponly': type.OptionalType(type.BooleanType()),
        'cookie_mode': type.OptionalType(type.StringType()),
        'cookie_name': type.OptionalType(type.StringType()),
        'cookie_path': type.OptionalType(type.StringType()),
        'cookie_secure': type.OptionalType(type.BooleanType()),
        '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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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. LBHttpProfile is deprecated as
            NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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. LBHttpProfile is deprecated as
            NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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.
    LBGenericPersistenceProfile is deprecated as NSX-T Load Balancer is
    deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
            LBCookiePersistenceProfile and LBGenericPersistenceProfile are
            deprecated as NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 deactivated by default and can be activated 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. LBHttpMonitorProfile is
    deprecated as NSX-T Load Balancer is deprecated.

    .. 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_0 = "HTTP_VERSION_1_0"
    """


    """
    REQUEST_VERSION_1 = "HTTP_VERSION_1_1"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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__0`
            * :attr:`LBHttpMonitorProfile.REQUEST_VERSION__1`
            
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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. LBHttpProfile is deprecated as NSX-T Load Balancer is
    deprecated.

    .. 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.

    """
    X_FORWARDED_FOR_INSERT = "INSERT"
    """


    """
    X_FORWARDED_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',
                            'server_keep_alive': 'server_keep_alive',
                            '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 server_keep_alive=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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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. This property is deprecated. Please use the property
            server_keep_alive in order to keep the backend server connection
            alive for the client connection. When create a new profile, if both
            ntlm and server_keep_alive are set as different values, ERROR will
            be reported. When update an existing profile, if either ntlm or
            server_keep_alive value is changed, both of them are updated with
            the changed value.

            .. deprecated:: unknown
        :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 deactivated, the response is passed to a client
            synchronously, immediately as it is received. When buffering is
            activated, 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  server_keep_alive: :class:`bool` or ``None``
        :param server_keep_alive: If server_keep_alive is true, it means the backend connection will
            keep alive for the client connection. Every client connection is
            tied 1:1 with the corresponding server-side connection. If
            server_keep_alive is false, it means the backend connection won't
            keep alive for the client connection. If server_keep_alive is not
            specified for API input, its value in API output will be the same
            with the property ntlm.
        :type  x_forwarded_for: :class:`str` or ``None``
        :param x_forwarded_for: Possible values are: 
            
            * :attr:`LBHttpProfile.X_FORWARDED_FOR_INSERT`
            * :attr:`LBHttpProfile.X_FORWARDED_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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. LBHttpProfile is deprecated as
            NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.server_keep_alive = server_keep_alive
        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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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()),
        'server_keep_alive': type.OptionalType(type.BooleanType()),
        '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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_0 = "HTTP_VERSION_1_0"
    """


    """
    VERSION_1 = "HTTP_VERSION_1_1"
    """


    """



    _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__0`
            * :attr:`LBHttpRequestVersionCondition.VERSION__1`
            
            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: 
        :type  client_certificate_subject_dn: :class:`LBClientCertificateSubjectDnCondition` or ``None``
        :param client_certificate_subject_dn: 
        :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 deactivated by default and can be activated 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. LBHttpsMonitorProfile is
    deprecated as NSX-T Load Balancer is deprecated.

    .. 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_0 = "HTTP_VERSION_1_0"
    """


    """
    REQUEST_VERSION_1 = "HTTP_VERSION_1_1"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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__0`
            * :attr:`LBHttpsMonitorProfile.REQUEST_VERSION__1`
            
            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: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 deactivated by default and can be activated 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. LBIcmpMonitorProfile is
    deprecated as NSX-T Load Balancer is deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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: 
            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):
    """
    The object is deprecated as NSX-T Load Balancer is deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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: 
        :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. LBPassiveMonitorProfile is deprecated
    as NSX-T Load Balancer is deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
            LBCookiePersistenceProfile and LBGenericPersistenceProfile are
            deprecated as NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivated by default and can be activated
            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.
            The property is deprecated as NSX-T Load Balancer is deprecated.

            .. deprecated:: unknown
        :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: 
        :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 deactivated by default and can be
            activated 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. The property is deprecated as NSX-T
            Load Balancer is deprecated.

            .. deprecated:: unknown
        :type  snat_translation: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param snat_translation: 
            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. The property
            is deprecated as NSX-T Load Balancer is deprecated.

            .. deprecated:: unknown
        :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. The property is
            deprecated as NSX-T Load Balancer is deprecated. format: int64

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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: 
        """
        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: 
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: 
        :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: 
        :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: 
        :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: 
        :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). LBRule is deprecated as NSX-T Load Balancer is
    deprecated.

    .. 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. LBServerSslProfile is deprecated as NSX-T Load Balancer
    is deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 activated by
            default. SSLv2, SSLv3, and TLS1.0 are supported, but deactivated 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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. LBServerSslProfileBinding is deprecated as
    NSX-T Load Balancer is deprecated.

    .. 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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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

            .. deprecated:: unknown
        :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. The property is deprecated as NSX-T Load
            Balancer is deprecated.

            .. deprecated:: unknown
        :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. The load balancer service sizes, SMALL,
            MEDIUM, LARGE and XLARGE are all deprecated. Customers who are
            using this set of features are advised to migrate to NSX Advanced
            Load Balancer (Avi) which provides a superset of the NSX-T load
            balancing functionality.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 LBServiceInstanceDetail(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'attachment_display_name': 'attachment_display_name',
                            'attachment_path': 'attachment_path',
                            'error_message': 'error_message',
                            }

    def __init__(self,
                 attachment_display_name=None,
                 attachment_path=None,
                 error_message=None,
                ):
        """
        :type  attachment_display_name: :class:`str` or ``None``
        :param attachment_display_name: The display name of the resource which the load balancer instance
            deploys on.
        :type  attachment_path: :class:`str` or ``None``
        :param attachment_path: The path of the resource which the load balancer instance deploys
            on.
        :type  error_message: :class:`str` or ``None``
        :param error_message: The error message for the load balancer instance. If the instance
            status is NOT_READY, error message will be attached.
        """
        self.attachment_display_name = attachment_display_name
        self.attachment_path = attachment_path
        self.error_message = error_message
        VapiStruct.__init__(self)


LBServiceInstanceDetail._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_instance_detail', {
        'attachment_display_name': type.OptionalType(type.StringType()),
        'attachment_path': type.OptionalType(type.StringType()),
        'error_message': type.OptionalType(type.StringType()),
    },
    LBServiceInstanceDetail,
    False,
    None))



class LBServiceInstanceDetailPerStatus(VapiStruct):
    """


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


    """
    STATUS_CONFLICT = "CONFLICT"
    """


    """
    STATUS_NOT_READY = "NOT_READY"
    """


    """



    _canonical_to_pep_names = {
                            'instance_details': 'instance_details',
                            'instance_number': 'instance_number',
                            'status': 'status',
                            }

    def __init__(self,
                 instance_details=None,
                 instance_number=None,
                 status=None,
                ):
        """
        :type  instance_details: :class:`list` of :class:`LBServiceInstanceDetail` or ``None``
        :param instance_details: The detailed information of the load balancer instance. This field
            will be only returned on realtime status API.
        :type  instance_number: :class:`long` or ``None``
        :param instance_number: It means the total number of instances in this status type for the
            given transport node. format: int64
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`LBServiceInstanceDetailPerStatus.STATUS_READY`
            * :attr:`LBServiceInstanceDetailPerStatus.STATUS_CONFLICT`
            * :attr:`LBServiceInstanceDetailPerStatus.STATUS_NOT_READY`
            
            The type of load balancer instance status.
        """
        self.instance_details = instance_details
        self.instance_number = instance_number
        self.status = status
        VapiStruct.__init__(self)


LBServiceInstanceDetailPerStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_instance_detail_per_status', {
        'instance_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBServiceInstanceDetail'))),
        'instance_number': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
    },
    LBServiceInstanceDetailPerStatus,
    False,
    None))



class LBServiceInstanceDetailPerTransportNode(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'instance_detail_per_status': 'instance_detail_per_status',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 instance_detail_per_status=None,
                 transport_node_id=None,
                ):
        """
        :type  instance_detail_per_status: :class:`list` of :class:`LBServiceInstanceDetailPerStatus` or ``None``
        :param instance_detail_per_status: Load balancer instances details for each load balancer instance
            status type from the given transport node.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: The UUID of the transport node.
        """
        self.instance_detail_per_status = instance_detail_per_status
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


LBServiceInstanceDetailPerTransportNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_instance_detail_per_transport_node', {
        'instance_detail_per_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBServiceInstanceDetailPerStatus'))),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    LBServiceInstanceDetailPerTransportNode,
    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_: 
        :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: 
        :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: 
        :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: 
        :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_PARTIALLY_UP = "PARTIALLY_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',
                            'instance_detail_per_tn': 'instance_detail_per_tn',
                            '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,
                 instance_detail_per_tn=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  instance_detail_per_tn: :class:`list` of :class:`LBServiceInstanceDetailPerTransportNode` or ``None``
        :param instance_detail_per_tn: Details of load balancer service instance per transport node.
        :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_PARTIALLY_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); PARTIALLY_UP means that some DLB
            instances on transport node are working successfully and some
            instances are not working successfully; 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: 
        :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.instance_detail_per_tn = instance_detail_per_tn
        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()),
        'instance_detail_per_tn': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBServiceInstanceDetailPerTransportNode'))),
        '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: 
        :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: 
        :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: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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.
            The property is deprecated as NSX-T Load Balancer is deprecated.

            .. deprecated:: unknown
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.
            LBCookiePersistenceProfile and LBGenericPersistenceProfile are
            deprecated as NSX-T Load Balancer is deprecated.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 server_keep_alive 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
            server_keep_alive 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 and HTTP_FORWARDING.

    .. 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 deactivated by default and can be activated 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. LBTcpMonitorProfile is
    deprecated as NSX-T Load Balancer is deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 deactivated by default and can be activated 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. LBUdpMonitorProfile is
    deprecated as NSX-T Load Balancer is deprecated.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :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: 
        :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 deactivated 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. The property is deprecated as NSX-T
            Load Balancer is deprecated. format: int64

            .. deprecated:: unknown
        :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. The property
            is deprecated as NSX-T Load Balancer is deprecated. format: int64

            .. deprecated:: unknown
        :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. The
            property is deprecated as NSX-T Load Balancer is deprecated.

            .. deprecated:: unknown
        :type  server_ssl_profile_binding: :class:`LBServerSslProfileBinding` or ``None``
        :param server_ssl_profile_binding: 
        :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. The property is deprecated as NSX-T
            Load Balancer is deprecated.

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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: 
        :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_VERTICALLY_ALIGNED = "VERTICALLY_ALIGNED"
    """


    """
    SUB_TYPE_HORIZONTALLY_ALIGNED = "HORIZONTALLY_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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  layout: :class:`Layout` or ``None``
        :param layout: 
        :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_VERTICALLY_ALIGNED`
            * :attr:`LabelValueConfiguration.SUB_TYPE_HORIZONTALLY_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. For HORIZONTALLY_ALIGNED sub_type,
            the value is placed right hand side of 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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"
    """


    """
    TIMEOUT_TYPE_FAST = "FAST"
    """


    """
    TIMEOUT_TYPE_SLOW = "SLOW"
    """


    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'load_balance_algorithm': 'load_balance_algorithm',
                            'mode': 'mode',
                            'name': 'name',
                            'timeout_type': 'timeout_type',
                            '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,
                 timeout_type=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  timeout_type: :class:`str` or ``None``
        :param timeout_type: Possible values are: 
            
            * :attr:`LacpGroupConfigInfo.TIMEOUT_TYPE_FAST`
            * :attr:`LacpGroupConfigInfo.TIMEOUT_TYPE_SLOW`
            
            To set the lag mode as fast for LACP. By default, it will be slow.
        :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.timeout_type = timeout_type
        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()),
        'timeout_type': 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 Lag(VapiStruct):
    """
    LACP group

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


    """
    LOAD_BALANCE_ALGORITHM_DESTMAC = "DESTMAC"
    """


    """
    LOAD_BALANCE_ALGORITHM_SRCDESTMAC = "SRCDESTMAC"
    """


    """
    LOAD_BALANCE_ALGORITHM_SRCDESTIPVLAN = "SRCDESTIPVLAN"
    """


    """
    LOAD_BALANCE_ALGORITHM_SRCDESTMACIPPORT = "SRCDESTMACIPPORT"
    """


    """
    MODE_ACTIVE = "ACTIVE"
    """


    """
    MODE_PASSIVE = "PASSIVE"
    """


    """
    TIMEOUT_TYPE_SLOW = "SLOW"
    """


    """
    TIMEOUT_TYPE_FAST = "FAST"
    """


    """



    _canonical_to_pep_names = {
                            'id': 'id',
                            'load_balance_algorithm': 'load_balance_algorithm',
                            'mode': 'mode',
                            'name': 'name',
                            'number_of_uplinks': 'number_of_uplinks',
                            'timeout_type': 'timeout_type',
                            'uplinks': 'uplinks',
                            }

    def __init__(self,
                 id=None,
                 load_balance_algorithm=None,
                 mode=None,
                 name=None,
                 number_of_uplinks=None,
                 timeout_type=None,
                 uplinks=None,
                ):
        """
        :type  id: :class:`str` or ``None``
        :param id: unique 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  load_balance_algorithm: :class:`str` or ``None``
        :param load_balance_algorithm: Possible values are: 
            
            * :attr:`Lag.LOAD_BALANCE_ALGORITHM_SRCMAC`
            * :attr:`Lag.LOAD_BALANCE_ALGORITHM_DESTMAC`
            * :attr:`Lag.LOAD_BALANCE_ALGORITHM_SRCDESTMAC`
            * :attr:`Lag.LOAD_BALANCE_ALGORITHM_SRCDESTIPVLAN`
            * :attr:`Lag.LOAD_BALANCE_ALGORITHM_SRCDESTMACIPPORT`
            
            LACP load balance Algorithm
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`Lag.MODE_ACTIVE`
            * :attr:`Lag.MODE_PASSIVE`
            
            LACP group mode
        :type  name: :class:`str` or ``None``
        :param name: Lag name
        :type  number_of_uplinks: :class:`long` or ``None``
        :param number_of_uplinks: number of uplinks format: int32
        :type  timeout_type: :class:`str` or ``None``
        :param timeout_type: Possible values are: 
            
            * :attr:`Lag.TIMEOUT_TYPE_SLOW`
            * :attr:`Lag.TIMEOUT_TYPE_FAST`
            
            LACP timeout type
        :type  uplinks: :class:`list` of :class:`Uplink` or ``None``
        :param uplinks: uplink names
            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.id = id
        self.load_balance_algorithm = load_balance_algorithm
        self.mode = mode
        self.name = name
        self.number_of_uplinks = number_of_uplinks
        self.timeout_type = timeout_type
        self.uplinks = uplinks
        VapiStruct.__init__(self)


Lag._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.lag', {
        'id': type.OptionalType(type.StringType()),
        'load_balance_algorithm': type.OptionalType(type.StringType()),
        'mode': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'number_of_uplinks': type.OptionalType(type.IntegerType()),
        'timeout_type': type.OptionalType(type.StringType()),
        'uplinks': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Uplink'))),
    },
    Lag,
    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"
    """


    """
    TYPE_AUTO = "AUTO"
    """


    """



    _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`
            * :attr:`Layout.TYPE_AUTO`
            
            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. If
            AUTO is chosen then container or widgets display area will be
            automatically calculated depending upon the required width.
        """
        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_: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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_: 
        :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_: 
        :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 LDAP 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_: 
        :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"
    """


    """
    ERROR_TYPE_UNKNOWN_HOST = "UNKNOWN_HOST"
    """


    """
    ERROR_TYPE_NO_ROUTE_TO_HOST = "NO_ROUTE_TO_HOST"
    """


    """
    ERROR_TYPE_BIND_EXCEPTION = "BIND_EXCEPTION"
    """


    """
    ERROR_TYPE_PORT_UNREACHABLE = "PORT_UNREACHABLE"
    """


    """
    ERROR_TYPE_BASE_DN_NOT_WITHIN_DOMAIN = "BASE_DN_NOT_WITHIN_DOMAIN"
    """


    """
    ERROR_TYPE_LDAP_SERVER_DISABLED = "LDAP_SERVER_DISABLED"
    """


    """



    _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`
            * :attr:`LdapProbeError.ERROR_TYPE_UNKNOWN_HOST`
            * :attr:`LdapProbeError.ERROR_TYPE_NO_ROUTE_TO_HOST`
            * :attr:`LdapProbeError.ERROR_TYPE_BIND_EXCEPTION`
            * :attr:`LdapProbeError.ERROR_TYPE_PORT_UNREACHABLE`
            * :attr:`LdapProbeError.ERROR_TYPE_BASE_DN_NOT_WITHIN_DOMAIN`
            * :attr:`LdapProbeError.ERROR_TYPE_LDAP_SERVER_DISABLED`
            
            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 require
            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. UNKNOWN_HOST: The hostname of
            the LDAP server could not be resolved. NO_ROUTE_TO_HOST: There is
            no network route to the host. BIND_EXCEPTION: A socket to the
            remote host could not be opened. PORT_UNREACHABLE: The LDAP port is
            not open on the remote host. BASE_DN_NOT_WITHIN_DOMAIN: For Active
            Directory, the base DN is not a subtree of the Domain Component
            tree corresponding to the LDAP domain. For example, if the domain
            is \"example.com\", the baseDN should be \"dc=example, dc=com\" or
            a subtree like \"ou=Users,dc=example,dc=com\".
            LDAP_SERVER_DISABLED: The LDAP server is marked as disabled in the
            NSX configuration and will not be used.
        """
        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"
    """


    """
    DISPLAY_MODE_ALL_LEGENDS = "SHOW_ALL_LEGENDS"
    """


    """
    DISPLAY_MODE_MIN_NO_OF_LEGENDS = "SHOW_MIN_NO_OF_LEGENDS"
    """


    """
    DISPLAY_MODE_OTHER_GROUP_WITH_LEGENDS = "SHOW_OTHER_GROUP_WITH_LEGENDS"
    """


    """
    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',
                            'display_mode': 'display_mode',
                            'filterable': 'filterable',
                            'min_legends_display_count': 'min_legends_display_count',
                            'other_group_legend_label': 'other_group_legend_label',
                            'position': 'position',
                            'type': 'type',
                            'unit': 'unit',
                            }

    def __init__(self,
                 alignment=None,
                 display_count=None,
                 display_mode=None,
                 filterable=None,
                 min_legends_display_count=None,
                 other_group_legend_label=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  display_mode: :class:`str` or ``None``
        :param display_mode: Possible values are: 
            
            * :attr:`Legend.DISPLAY_MODE_ALL_LEGENDS`
            * :attr:`Legend.DISPLAY_MODE_MIN_NO_OF_LEGENDS`
            * :attr:`Legend.DISPLAY_MODE_OTHER_GROUP_WITH_LEGENDS`
            
            Display mode for legends.
        :type  filterable: :class:`bool` or ``None``
        :param filterable: Show checkbox along with legends if value is set to true. Widget
            filtering capability can be enable based on legend checkbox
            selection. for 'display_mode' SHOW_OTHER_GROUP_WITH_LEGENDS
            filterable property is not supported.
        :type  min_legends_display_count: :class:`long` or ``None``
        :param min_legends_display_count: A minimum number of legends to be displayed upfront. if
            'display_mode' is set to SHOW_MIN_NO_OF_LEGENDS then this property
            value will be used to display number of legends upfront in the UI.
            format: int32
        :type  other_group_legend_label: :class:`str` or ``None``
        :param other_group_legend_label: A translated label for showing other category label in legends.
        :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.display_mode = display_mode
        self.filterable = filterable
        self.min_legends_display_count = min_legends_display_count
        self.other_group_legend_label = other_group_legend_label
        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()),
        'display_mode': type.OptionalType(type.StringType()),
        'filterable': type.OptionalType(type.BooleanType()),
        'min_legends_display_count': type.OptionalType(type.IntegerType()),
        'other_group_legend_label': type.OptionalType(type.StringType()),
        'position': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
        'unit': type.OptionalType(type.StringType()),
    },
    Legend,
    False,
    None))



class LegendWidgetConfiguration(VapiStruct):
    """
    Represents configuration for Legend widget. For this widget the data source
    is not applicable. This widget can be use to add the Legend inside the
    dashboard container.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LegendWidgetConfiguration"
    """
    Identifier denoting this class, when it is used 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 = {
                            'layout': 'layout',
                            'source_widget_id': 'source_widget_id',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 layout=None,
                 source_widget_id=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='LegendWidgetConfiguration',
                 tags=None,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  layout: :class:`Legend` or ``None``
        :param layout: 
        :type  source_widget_id: :class:`str` or ``None``
        :param source_widget_id: Id of source widget, if any. Id should be a valid id of an existing
            widget. This property can be used to identify the source of the
            data for this legend 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        self.layout = layout
        self.source_widget_id = source_widget_id
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

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

LegendWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.legend_widget_configuration', {
        'layout': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'source_widget_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')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    LegendWidgetConfiguration,
    False,
    None))



class LineChartPlotConfiguration(VapiStruct):
    """
    A line chart plotting configuration.

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



    _canonical_to_pep_names = {
                            'allow_maximize': 'allow_maximize',
                            'condition': 'condition',
                            'fill_gradient_area': 'fill_gradient_area',
                            'num_of_series_to_display': 'num_of_series_to_display',
                            'show_curved_lines': 'show_curved_lines',
                            'show_data_in_tooltip': 'show_data_in_tooltip',
                            'show_data_points': 'show_data_points',
                            'show_grid_lines': 'show_grid_lines',
                            'show_grouped_tooltip': 'show_grouped_tooltip',
                            'show_min_max_on_series': 'show_min_max_on_series',
                            'show_unit_in_tooltip': 'show_unit_in_tooltip',
                            'sort_data_in_grouped_tooltip': 'sort_data_in_grouped_tooltip',
                            'sort_series': 'sort_series',
                            }

    def __init__(self,
                 allow_maximize=None,
                 condition=None,
                 fill_gradient_area=None,
                 num_of_series_to_display=None,
                 show_curved_lines=None,
                 show_data_in_tooltip=None,
                 show_data_points=None,
                 show_grid_lines=None,
                 show_grouped_tooltip=None,
                 show_min_max_on_series=None,
                 show_unit_in_tooltip=None,
                 sort_data_in_grouped_tooltip=None,
                 sort_series=None,
                ):
        """
        :type  allow_maximize: :class:`bool` or ``None``
        :param allow_maximize: Allow maximize capability for this widget
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the given chart config is applied to
            the widget configuration.
        :type  fill_gradient_area: :class:`bool` or ``None``
        :param fill_gradient_area: Fill the line chart area with a gradient series color.
        :type  num_of_series_to_display: :class:`long` or ``None``
        :param num_of_series_to_display: Specifies the number of series to be displayed in a line chart. If
            no value is provided all the series will be displayed. format:
            int32
        :type  show_curved_lines: :class:`bool` or ``None``
        :param show_curved_lines: Used for displaying the curved lines for a series in a line chart.
            By default, straight line is used to for a series in a line chart.
        :type  show_data_in_tooltip: :class:`bool` or ``None``
        :param show_data_in_tooltip: Show the data in tooltip.
        :type  show_data_points: :class:`bool` or ``None``
        :param show_data_points: Controls the visiblity of the data points on the line chart. If
            value is set to false data points wont be high- lighted on the
            lines.
        :type  show_grid_lines: :class:`bool` or ``None``
        :param show_grid_lines: Controls the visiblity of the grid lines in line chart.
        :type  show_grouped_tooltip: :class:`bool` or ``None``
        :param show_grouped_tooltip: Controls the visiblity of the grouped tooltip in a line chart
            across all series.
        :type  show_min_max_on_series: :class:`bool` or ``None``
        :param show_min_max_on_series: Controls the visiblity of the min and max value across line series
            in line chart.
        :type  show_unit_in_tooltip: :class:`bool` or ``None``
        :param show_unit_in_tooltip: Show the data unit in tooltip.
        :type  sort_data_in_grouped_tooltip: :class:`bool` or ``None``
        :param sort_data_in_grouped_tooltip: Sort the data in grouped tooltip.
        :type  sort_series: :class:`bool` or ``None``
        :param sort_series: Specifies whether the series should be sorted by the latest data
            point.
        """
        self.allow_maximize = allow_maximize
        self.condition = condition
        self.fill_gradient_area = fill_gradient_area
        self.num_of_series_to_display = num_of_series_to_display
        self.show_curved_lines = show_curved_lines
        self.show_data_in_tooltip = show_data_in_tooltip
        self.show_data_points = show_data_points
        self.show_grid_lines = show_grid_lines
        self.show_grouped_tooltip = show_grouped_tooltip
        self.show_min_max_on_series = show_min_max_on_series
        self.show_unit_in_tooltip = show_unit_in_tooltip
        self.sort_data_in_grouped_tooltip = sort_data_in_grouped_tooltip
        self.sort_series = sort_series
        VapiStruct.__init__(self)


LineChartPlotConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.line_chart_plot_configuration', {
        'allow_maximize': type.OptionalType(type.BooleanType()),
        'condition': type.OptionalType(type.StringType()),
        'fill_gradient_area': type.OptionalType(type.BooleanType()),
        'num_of_series_to_display': type.OptionalType(type.IntegerType()),
        'show_curved_lines': type.OptionalType(type.BooleanType()),
        'show_data_in_tooltip': type.OptionalType(type.BooleanType()),
        'show_data_points': type.OptionalType(type.BooleanType()),
        'show_grid_lines': type.OptionalType(type.BooleanType()),
        'show_grouped_tooltip': type.OptionalType(type.BooleanType()),
        'show_min_max_on_series': type.OptionalType(type.BooleanType()),
        'show_unit_in_tooltip': type.OptionalType(type.BooleanType()),
        'sort_data_in_grouped_tooltip': type.OptionalType(type.BooleanType()),
        'sort_series': type.OptionalType(type.BooleanType()),
    },
    LineChartPlotConfiguration,
    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_: 
        :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 LiveTraceActionConfig(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'count_config': 'count_config',
                            'datapath_stats_config': 'datapath_stats_config',
                            'pktcap_config': 'pktcap_config',
                            'trace_config': 'trace_config',
                            }

    def __init__(self,
                 count_config=None,
                 datapath_stats_config=None,
                 pktcap_config=None,
                 trace_config=None,
                ):
        """
        :type  count_config: :class:`CountActionConfig` or ``None``
        :param count_config: 
        :type  datapath_stats_config: :class:`DatapathStatsActionConfig` or ``None``
        :param datapath_stats_config: 
        :type  pktcap_config: :class:`PktcapActionConfig` or ``None``
        :param pktcap_config: 
        :type  trace_config: :class:`TraceActionConfig` or ``None``
        :param trace_config: 
        """
        self.count_config = count_config
        self.datapath_stats_config = datapath_stats_config
        self.pktcap_config = pktcap_config
        self.trace_config = trace_config
        VapiStruct.__init__(self)


LiveTraceActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_action_config', {
        'count_config': type.OptionalType(type.ReferenceType(__name__, 'CountActionConfig')),
        'datapath_stats_config': type.OptionalType(type.ReferenceType(__name__, 'DatapathStatsActionConfig')),
        'pktcap_config': type.OptionalType(type.ReferenceType(__name__, 'PktcapActionConfig')),
        'trace_config': type.OptionalType(type.ReferenceType(__name__, 'TraceActionConfig')),
    },
    LiveTraceActionConfig,
    False,
    None))



class LiveTraceConfig(VapiStruct):
    """
    Livetrace 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'actions': 'actions',
                            'filter': 'filter',
                            'ipsec_vpn_config': 'ipsec_vpn_config',
                            'is_transient': 'is_transient',
                            'src_port_path': 'src_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 actions=None,
                 filter=None,
                 ipsec_vpn_config=None,
                 is_transient=None,
                 src_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`PolicyLiveTraceActionConfig` or ``None``
        :param actions: 
        :type  filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        :type  ipsec_vpn_config: :class:`PolicyLiveTraceIpsecVpnConfig` or ``None``
        :param ipsec_vpn_config: 
        :type  is_transient: :class:`bool` or ``None``
        :param is_transient: This field indicates whether the intent is transient. If it is set
            to true, intent will be cleaned up after 1 hour of inactivity.
        :type  src_port_path: :class:`str` or ``None``
        :param src_port_path: Policy path of logical port to start a livetrace session.
        :type  timeout: :class:`long` or ``None``
        :param timeout: The duration for observing live traffic on the specified source
            logical port. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.actions = actions
        self.filter = filter
        self.ipsec_vpn_config = ipsec_vpn_config
        self.is_transient = is_transient
        self.src_port_path = src_port_path
        self.timeout = timeout
        VapiStruct.__init__(self)


LiveTraceConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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.ReferenceType(__name__, 'PolicyLiveTraceActionConfig')),
        'filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
        'ipsec_vpn_config': type.OptionalType(type.ReferenceType(__name__, 'PolicyLiveTraceIpsecVpnConfig')),
        'is_transient': type.OptionalType(type.BooleanType()),
        'src_port_path': type.OptionalType(type.StringType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    LiveTraceConfig,
    False,
    None))



class LiveTraceConfigListResult(VapiStruct):
    """
    Paged collection of LiveTraceConfig entities

    .. 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_: 
        :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:`LiveTraceConfig` or ``None``
        :param results: LiveTraceConfig 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)


LiveTraceConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_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__, 'LiveTraceConfig'))),
    },
    LiveTraceConfigListResult,
    False,
    None))



class LiveTraceFilterData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LiveTraceFilterData"
    """
    Identifier denoting this class, when it is used 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_FIELDSFILTERDATA = "FieldsFilterData"
    """


    """
    RESOURCE_TYPE_PLAINFILTERDATA = "PlainFilterData"
    """


    """



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

    def __init__(self,
                 resource_type='LiveTraceFilterData',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LiveTraceFilterData.RESOURCE_TYPE_FIELDSFILTERDATA`
            * :attr:`LiveTraceFilterData.RESOURCE_TYPE_PLAINFILTERDATA`
            
            Filter type
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class LiveTraceFilterInvalidInfo(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'filter': 'filter',
                            'reason': 'reason',
                            }

    def __init__(self,
                 filter=None,
                 reason=None,
                ):
        """
        :type  filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        :type  reason: :class:`str` or ``None``
        :param reason: The description of why the filter is rejected by 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.filter = filter
        self.reason = reason
        VapiStruct.__init__(self)


LiveTraceFilterInvalidInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_filter_invalid_info', {
        'filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
        'reason': type.OptionalType(type.StringType()),
    },
    LiveTraceFilterInvalidInfo,
    False,
    None))



class LiveTraceIpsecVpnConfig(VapiStruct):
    """
    Information for deriving virtual tunnel interface (VTI) of Route-based
    IPSec VPN session.

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



    _canonical_to_pep_names = {
                            'session_id': 'session_id',
                            }

    def __init__(self,
                 session_id=None,
                ):
        """
        :type  session_id: :class:`str` or ``None``
        :param session_id: IPSec VPN session universally unique identifier
        """
        self.session_id = session_id
        VapiStruct.__init__(self)


LiveTraceIpsecVpnConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_ipsec_vpn_config', {
        'session_id': type.OptionalType(type.StringType()),
    },
    LiveTraceIpsecVpnConfig,
    False,
    None))



class LiveTraceListResult(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_: 
        :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:`LiveTraceStatus` or ``None``
        :param results: Livetrace status 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)


LiveTraceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_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__, 'LiveTraceStatus'))),
    },
    LiveTraceListResult,
    False,
    None))



class LiveTracePacketGranularActionConfig(VapiStruct):
    """
    Configuration of livetrace packet granular action

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


    """
    TRACE_TYPE_BI_DIRECTIONAL = "BI_DIRECTIONAL"
    """


    """



    _canonical_to_pep_names = {
                            'dest_ipsec_vpn_config': 'dest_ipsec_vpn_config',
                            'dest_port_path': 'dest_port_path',
                            'reverse_filter': 'reverse_filter',
                            'sampling': 'sampling',
                            'trace_type': 'trace_type',
                            }

    def __init__(self,
                 dest_ipsec_vpn_config=None,
                 dest_port_path=None,
                 reverse_filter=None,
                 sampling=None,
                 trace_type=None,
                ):
        """
        :type  dest_ipsec_vpn_config: :class:`PolicyLiveTraceIpsecVpnConfig` or ``None``
        :param dest_ipsec_vpn_config: 
        :type  dest_port_path: :class:`str` or ``None``
        :param dest_port_path: Policy path of logical port for the reverse direction of a
            livetrace session. It is required only when the trace type is
            bidirectional. Multiple bi-directional actions in a livetrace
            session should have the same port specified for the reverse
            direction.
        :type  reverse_filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param reverse_filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        :type  sampling: :class:`LiveTraceSamplingConfig` or ``None``
        :param sampling: 
        :type  trace_type: :class:`str` or ``None``
        :param trace_type: Possible values are: 
            
            *
              :attr:`LiveTracePacketGranularActionConfig.TRACE_TYPE_UNI_DIRECTIONAL`
            *
              :attr:`LiveTracePacketGranularActionConfig.TRACE_TYPE_BI_DIRECTIONAL`
            
            Type of trace
        """
        self.dest_ipsec_vpn_config = dest_ipsec_vpn_config
        self.dest_port_path = dest_port_path
        self.reverse_filter = reverse_filter
        self.sampling = sampling
        self.trace_type = trace_type
        VapiStruct.__init__(self)


LiveTracePacketGranularActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_packet_granular_action_config', {
        'dest_ipsec_vpn_config': type.OptionalType(type.ReferenceType(__name__, 'PolicyLiveTraceIpsecVpnConfig')),
        'dest_port_path': type.OptionalType(type.StringType()),
        'reverse_filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
        'sampling': type.OptionalType(type.ReferenceType(__name__, 'LiveTraceSamplingConfig')),
        'trace_type': type.OptionalType(type.StringType()),
    },
    LiveTracePacketGranularActionConfig,
    False,
    None))



class LiveTraceResult(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'counter_results': 'counter_results',
                            'datapath_stats_results': 'datapath_stats_results',
                            'id': 'id',
                            'pktcap_results': 'pktcap_results',
                            'trace_results': 'trace_results',
                            }

    def __init__(self,
                 counter_results=None,
                 datapath_stats_results=None,
                 id=None,
                 pktcap_results=None,
                 trace_results=None,
                ):
        """
        :type  counter_results: :class:`CounterResult` or ``None``
        :param counter_results: 
        :type  datapath_stats_results: :class:`list` of :class:`DatapathStatsResult` or ``None``
        :param datapath_stats_results: The results of the datapath statistics action.
        :type  id: :class:`str` or ``None``
        :param id: The id is assigned by Livetrace and cannot be specified by user.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pktcap_results: :class:`list` of :class:`PktCapResult` or ``None``
        :param pktcap_results: PktCap action results
        :type  trace_results: :class:`list` of :class:`TraceResult` or ``None``
        :param trace_results: Trace action observation list results
        """
        self.counter_results = counter_results
        self.datapath_stats_results = datapath_stats_results
        self.id = id
        self.pktcap_results = pktcap_results
        self.trace_results = trace_results
        VapiStruct.__init__(self)


LiveTraceResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_result', {
        'counter_results': type.OptionalType(type.ReferenceType(__name__, 'CounterResult')),
        'datapath_stats_results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DatapathStatsResult'))),
        'id': type.OptionalType(type.StringType()),
        'pktcap_results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PktCapResult'))),
        'trace_results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TraceResult'))),
    },
    LiveTraceResult,
    False,
    None))



class LiveTraceSamplingConfig(VapiStruct):
    """
    Sampling parameter for a livetrace action

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



    _canonical_to_pep_names = {
                            'match_number': 'match_number',
                            'sampling_interval': 'sampling_interval',
                            'sampling_rate': 'sampling_rate',
                            }

    def __init__(self,
                 match_number=None,
                 sampling_interval=None,
                 sampling_rate=None,
                ):
        """
        :type  match_number: :class:`long` or ``None``
        :param match_number: First N packets are sampled. The upper limits of sampling number
            for livetrace actions are listed as below: - trace action: 50 -
            packet capture action: 500 - datapath statistics action: 65535
            format: int64
        :type  sampling_interval: :class:`long` or ``None``
        :param sampling_interval: A packet is sampled for every given time interval in ms. format:
            int64
        :type  sampling_rate: :class:`long` or ``None``
        :param sampling_rate: 1 out of N packets is sampled on average. format: int64
        """
        self.match_number = match_number
        self.sampling_interval = sampling_interval
        self.sampling_rate = sampling_rate
        VapiStruct.__init__(self)


LiveTraceSamplingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_sampling_config', {
        'match_number': type.OptionalType(type.IntegerType()),
        'sampling_interval': type.OptionalType(type.IntegerType()),
        'sampling_rate': type.OptionalType(type.IntegerType()),
    },
    LiveTraceSamplingConfig,
    False,
    None))



class LiveTraceStatus(VapiStruct):
    """


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


    """
    INVALIDATION_REASON_DP_DESTROY = "DP_DESTROY"
    """


    """
    INVALIDATION_REASON_UNKNOWN = "UNKNOWN"
    """


    """
    INVALIDATION_REASON_PCAP_IO_FAILURE = "PCAP_IO_FAILURE"
    """


    """
    OPERATION_STATE_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    OPERATION_STATE_FINISHED = "FINISHED"
    """


    """
    OPERATION_STATE_PARTIAL_FINISHED = "PARTIAL_FINISHED"
    """


    """
    OPERATION_STATE_CANCELED = "CANCELED"
    """


    """
    OPERATION_STATE_INVALIDATED = "INVALIDATED"
    """


    """
    OPERATION_STATE_TIMEOUT = "TIMEOUT"
    """


    """
    REQUEST_STATUS_SUCCESS_DELIVERED = "SUCCESS_DELIVERED"
    """


    """
    REQUEST_STATUS_LCP_FAILURE = "LCP_FAILURE"
    """


    """
    REQUEST_STATUS_INVALID_FILTER = "INVALID_FILTER"
    """


    """
    REQUEST_STATUS_DATAPATH_FAILURE = "DATAPATH_FAILURE"
    """


    """
    REQUEST_STATUS_CONNECTION_ERROR = "CONNECTION_ERROR"
    """


    """
    REQUEST_STATUS_TIMEOUT = "TIMEOUT"
    """


    """
    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',
                            'actions': 'actions',
                            'filter': 'filter',
                            'filter_invalid_info': 'filter_invalid_info',
                            'invalidation_reason': 'invalidation_reason',
                            'ipsec_vpn_config': 'ipsec_vpn_config',
                            'operation_state': 'operation_state',
                            'request_status': 'request_status',
                            'source_lport': 'source_lport',
                            '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,
                 actions=None,
                 filter=None,
                 filter_invalid_info=None,
                 invalidation_reason=None,
                 ipsec_vpn_config=None,
                 operation_state=None,
                 request_status=None,
                 source_lport=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  actions: :class:`LiveTraceActionConfig` or ``None``
        :param actions: 
        :type  filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        :type  filter_invalid_info: :class:`list` of :class:`LiveTraceFilterInvalidInfo` or ``None``
        :param filter_invalid_info: The detail of invalid filter(s) in a Livetrace session. This field
            is only applicable for filters of PlainFilterData 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  invalidation_reason: :class:`str` or ``None``
        :param invalidation_reason: Possible values are: 
            
            * :attr:`LiveTraceStatus.INVALIDATION_REASON_PORT_DISCONNECT`
            * :attr:`LiveTraceStatus.INVALIDATION_REASON_DP_DESTROY`
            * :attr:`LiveTraceStatus.INVALIDATION_REASON_UNKNOWN`
            * :attr:`LiveTraceStatus.INVALIDATION_REASON_PCAP_IO_FAILURE`
            
            The reason of invalidating a Livetrace session. PORT_DISCONNECT -
            Source or destination logical port of the session is disconnected
            or disabled. DP_DESTROY - Dataplane is destroyed. UNKNOWN - The
            invalidation reason cannot be determined. PCAP_IO_FAILURE -
            Exception occurred when writing captured packets to file. In
            general, this issue could be caused by insufficient disk partition
            space of /tmp on ESXi or Edge.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipsec_vpn_config: :class:`LiveTraceIpsecVpnConfig` or ``None``
        :param ipsec_vpn_config: 
        :type  operation_state: :class:`str` or ``None``
        :param operation_state: Possible values are: 
            
            * :attr:`LiveTraceStatus.OPERATION_STATE_IN_PROGRESS`
            * :attr:`LiveTraceStatus.OPERATION_STATE_FINISHED`
            * :attr:`LiveTraceStatus.OPERATION_STATE_PARTIAL_FINISHED`
            * :attr:`LiveTraceStatus.OPERATION_STATE_CANCELED`
            * :attr:`LiveTraceStatus.OPERATION_STATE_INVALIDATED`
            * :attr:`LiveTraceStatus.OPERATION_STATE_TIMEOUT`
            
            The operation state of Livetrace. IN_PROGRESS - collecting the
            session results. FINISHED - session results collection completes.
            PARTIAL_FINISHED - session results may be incomplete. CANCELED -
            session is cancelled by exception. INVALIDATED - session is
            invalidated by configuration changes such as VM migration. TIMEOUT
            - session is not completed on 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.
        :type  request_status: :class:`str` or ``None``
        :param request_status: Possible values are: 
            
            * :attr:`LiveTraceStatus.REQUEST_STATUS_SUCCESS_DELIVERED`
            * :attr:`LiveTraceStatus.REQUEST_STATUS_LCP_FAILURE`
            * :attr:`LiveTraceStatus.REQUEST_STATUS_INVALID_FILTER`
            * :attr:`LiveTraceStatus.REQUEST_STATUS_DATAPATH_FAILURE`
            * :attr:`LiveTraceStatus.REQUEST_STATUS_CONNECTION_ERROR`
            * :attr:`LiveTraceStatus.REQUEST_STATUS_TIMEOUT`
            * :attr:`LiveTraceStatus.REQUEST_STATUS_UNKNOWN`
            
            The status of a Livetrace request. SUCCESS_DELIVERED - The request
            is delivered successfully. LCP_FAILURE - LCP agent fails to realize
            the request. INVALID_FILTER - Filter is invalid. DATAPATH_FAILURE -
            Dataplane fails to realize the request. TIMEOUT - The response to
            the request is not received within timeout. CONNECTION_ERROR -
            There is connection error between host components. UNKNOWN - The
            status of 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  source_lport: :class:`str` or ``None``
        :param source_lport: The source 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  timeout: :class:`long` or ``None``
        :param timeout: Timeout in seconds for livetrace session format: int64
            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.actions = actions
        self.filter = filter
        self.filter_invalid_info = filter_invalid_info
        self.invalidation_reason = invalidation_reason
        self.ipsec_vpn_config = ipsec_vpn_config
        self.operation_state = operation_state
        self.request_status = request_status
        self.source_lport = source_lport
        self.timeout = timeout
        VapiStruct.__init__(self)


LiveTraceStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.live_trace_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'))),
        'actions': type.OptionalType(type.ReferenceType(__name__, 'LiveTraceActionConfig')),
        'filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
        'filter_invalid_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LiveTraceFilterInvalidInfo'))),
        'invalidation_reason': type.OptionalType(type.StringType()),
        'ipsec_vpn_config': type.OptionalType(type.ReferenceType(__name__, 'LiveTraceIpsecVpnConfig')),
        'operation_state': type.OptionalType(type.StringType()),
        'request_status': type.OptionalType(type.StringType()),
        'source_lport': type.OptionalType(type.StringType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    LiveTraceStatus,
    False,
    None))



class LoadBalancerVPCEndpoint(VapiStruct):
    """
    Load Balancer for VPC

    .. 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: Flag to enable load balancer for VPC.
        """
        self.enabled = enabled
        VapiStruct.__init__(self)


LoadBalancerVPCEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.load_balancer_VPC_endpoint', {
        'enabled': type.OptionalType(type.BooleanType()),
    },
    LoadBalancerVPCEndpoint,
    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"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_INTER_VRF_STATIC = "INTER_VRF_STATIC"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bfd_profile_path': 'bfd_profile_path',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bfd_profile_path=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: This profile is applied to all static route peers in this locale.
            BFD profile configured on static route peers takes precedence over
            global configuration. If this field is empty, a default profile is
            applied to all peers.
        :type  edge_cluster_path: :class:`str` or ``None``
        :param edge_cluster_path: The reference to the edge cluster using the policy path of the edge
            cluster or label of type PolicyEdgeCluster. Auto assigned on Tier0
            if the associated enforcement point has only one edge cluster. For
            Tier1 ACTIVE-ACTIVE, edge cluster can not be removed and Edge
            Cluster will be defaulted to edge cluster from connected Tier0.
        :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: 
        :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`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_INTER_VRF_STATIC`
            
            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.

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        '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_: 
        :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 LogicalPortOperationalStatus(VapiStruct):
    """


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


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'logical_port_id': 'logical_port_id',
                            'status': 'status',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 logical_port_id=None,
                 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  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:`LogicalPortOperationalStatus.STATUS_UP`
            * :attr:`LogicalPortOperationalStatus.STATUS_DOWN`
            * :attr:`LogicalPortOperationalStatus.STATUS_UNKNOWN`
            
            The Operational status of the logical port
        """
        self.last_update_timestamp = last_update_timestamp
        self.logical_port_id = logical_port_id
        self.status = status
        VapiStruct.__init__(self)


LogicalPortOperationalStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_port_operational_status', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'logical_port_id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    LogicalPortOperationalStatus,
    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_firewall_packets': 'dropped_by_firewall_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_firewall_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_firewall_packets: :class:`DfwDropCounters` or ``None``
        :param dropped_by_firewall_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_firewall_packets = dropped_by_firewall_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_firewall_packets': type.OptionalType(type.ReferenceType(__name__, 'DfwDropCounters')),
        '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',
                            'sub_cluster_id': 'sub_cluster_id',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 rx=None,
                 tx=None,
                 sub_cluster_id=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  sub_cluster_id: :class:`str` or ``None``
        :param sub_cluster_id: The subcluster ID of logical router port. Active-Active service
            router cluster forms pariwise sub cluster of nodes and syncs states
            among them.
            This 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: 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.sub_cluster_id = sub_cluster_id
        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')),
        'sub_cluster_id': type.OptionalType(type.StringType()),
        '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"
    """


    """
    STATE_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """



    _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`
            * :attr:`LogicalRouterState.STATE_REPLACE_FAILED`
            *
              :attr:`LogicalRouterState.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`LogicalRouterState.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            * :attr:`LogicalRouterState.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            * :attr:`LogicalRouterState.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`LogicalRouterState.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            * :attr:`LogicalRouterState.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`LogicalRouterState.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`LogicalRouterState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`LogicalRouterState.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`LogicalRouterState.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`LogicalRouterState.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`LogicalRouterState.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`LogicalRouterState.STATE_COMPUTE_MANAGER_NOT_FOUND`
            * :attr:`LogicalRouterState.STATE_DELETE_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`LogicalRouterState.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`LogicalRouterState.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`LogicalRouterState.STATE_MAINTENANCE_MODE_ENABLED`
            * :attr:`LogicalRouterState.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`LogicalRouterState.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            * :attr:`LogicalRouterState.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`LogicalRouterState.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            * :attr:`LogicalRouterState.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            * :attr:`LogicalRouterState.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            * :attr:`LogicalRouterState.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`LogicalRouterState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`LogicalRouterState.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`LogicalRouterState.STATE_REDEPLOY_ACTIVITY_FAILED`
            * :attr:`LogicalRouterState.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            * :attr:`LogicalRouterState.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`LogicalRouterState.STATE_REPLACE_ACTIVITY_FAILED`
            * :attr:`LogicalRouterState.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_REPLACE_ACTIVITY_SCHEDULED`
            * :attr:`LogicalRouterState.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`LogicalRouterState.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`LogicalRouterState.STATE_RETRYING_REPLACE`
            *
              :attr:`LogicalRouterState.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`LogicalRouterState.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`LogicalRouterState.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`LogicalRouterState.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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"
    """


    """
    SERVICE_GROUP_HA_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    SERVICE_GROUP_HA_STATUS_ACTIVE = "ACTIVE"
    """


    """
    SERVICE_GROUP_HA_STATUS_STANDBY = "STANDBY"
    """


    """



    _canonical_to_pep_names = {
                            'edge_path': 'edge_path',
                            'high_availability_status': 'high_availability_status',
                            'is_default_sub_cluster': 'is_default_sub_cluster',
                            'service_group_ha_status': 'service_group_ha_status',
                            'service_router_id': 'service_router_id',
                            'sub_cluster_id': 'sub_cluster_id',
                            'traffic_group_id': 'traffic_group_id',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 edge_path=None,
                 high_availability_status=None,
                 is_default_sub_cluster=None,
                 service_group_ha_status=None,
                 service_router_id=None,
                 sub_cluster_id=None,
                 traffic_group_id=None,
                 transport_node_id=None,
                ):
        """
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Only populated by Policy APIs
        :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  is_default_sub_cluster: :class:`bool` or ``None``
        :param is_default_sub_cluster: True if edge transport node is a member of default sub cluster
        :type  service_group_ha_status: :class:`str` or ``None``
        :param service_group_ha_status: Possible values are: 
            
            *
              :attr:`LogicalRouterStatusPerNode.SERVICE_GROUP_HA_STATUS_UNKNOWN`
            * :attr:`LogicalRouterStatusPerNode.SERVICE_GROUP_HA_STATUS_ACTIVE`
            *
              :attr:`LogicalRouterStatusPerNode.SERVICE_GROUP_HA_STATUS_STANDBY`
            
            Service High availability status of service group linked with sub
            cluster.
        :type  service_router_id: :class:`str` or ``None``
        :param service_router_id: id of the service router where the router status is retrieved.
        :type  sub_cluster_id: :class:`str` or ``None``
        :param sub_cluster_id: This field is populated for sateful active-active mode. Runtime
            state is only synced among nodes in the same sub cluster.
        :type  traffic_group_id: :class:`str` or ``None``
        :param traffic_group_id: This field is populated only for VMC on AWS. It is the ID of the
            traffic group associated with the edge node.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node where the router status is retrieved.
        """
        self.edge_path = edge_path
        self.high_availability_status = high_availability_status
        self.is_default_sub_cluster = is_default_sub_cluster
        self.service_group_ha_status = service_group_ha_status
        self.service_router_id = service_router_id
        self.sub_cluster_id = sub_cluster_id
        self.traffic_group_id = traffic_group_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', {
        'edge_path': type.OptionalType(type.StringType()),
        'high_availability_status': type.OptionalType(type.StringType()),
        'is_default_sub_cluster': type.OptionalType(type.BooleanType()),
        'service_group_ha_status': type.OptionalType(type.StringType()),
        'service_router_id': type.OptionalType(type.StringType()),
        'sub_cluster_id': type.OptionalType(type.StringType()),
        'traffic_group_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_firewall_packets': 'dropped_by_firewall_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',
                            'nsxt_swsec': 'nsxt_swsec',
                            'nsxt_vdl2': 'nsxt_vdl2',
                            'nsxt_vdrb': 'nsxt_vdrb',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_firewall_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 last_update_timestamp=None,
                 logical_switch_id=None,
                 nsxt_swsec=None,
                 nsxt_vdl2=None,
                 nsxt_vdrb=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_firewall_packets: :class:`DfwDropCounters` or ``None``
        :param dropped_by_firewall_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.
        :type  nsxt_swsec: :class:`SwsecCounters` or ``None``
        :param nsxt_swsec: 
        :type  nsxt_vdl2: :class:`Vdl2Counters` or ``None``
        :param nsxt_vdl2: 
        :type  nsxt_vdrb: :class:`VdrbCounters` or ``None``
        :param nsxt_vdrb: 
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_firewall_packets = dropped_by_firewall_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
        self.nsxt_swsec = nsxt_swsec
        self.nsxt_vdl2 = nsxt_vdl2
        self.nsxt_vdrb = nsxt_vdrb
        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_firewall_packets': type.OptionalType(type.ReferenceType(__name__, 'DfwDropCounters')),
        '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()),
        'nsxt_swsec': type.OptionalType(type.ReferenceType(__name__, 'SwsecCounters')),
        'nsxt_vdl2': type.OptionalType(type.ReferenceType(__name__, 'Vdl2Counters')),
        'nsxt_vdrb': type.OptionalType(type.ReferenceType(__name__, 'VdrbCounters')),
    },
    LogicalSwitchStatistics,
    False,
    None))



class LoginLogoutEventCollection(VapiStruct):
    """
    Collection of Login/Logout events reported to Policy

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



    _canonical_to_pep_names = {
                            'login_logout_events': 'login_logout_events',
                            }

    def __init__(self,
                 login_logout_events=None,
                ):
        """
        :type  login_logout_events: :class:`list` of :class:`LoginLogoutEventMap` or ``None``
        :param login_logout_events: Set of user to IP address pair
        """
        self.login_logout_events = login_logout_events
        VapiStruct.__init__(self)


LoginLogoutEventCollection._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.login_logout_event_collection', {
        'login_logout_events': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LoginLogoutEventMap'))),
    },
    LoginLogoutEventCollection,
    False,
    None))



class LoginLogoutEventMap(VapiStruct):
    """
    User Login/Logout event Map

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


    """
    EVENT_TYPE_LOGIN = "LOGIN"
    """


    """
    EVENT_TYPE_LOGOUT = "LOGOUT"
    """


    """



    _canonical_to_pep_names = {
                            'domain_name': 'domain_name',
                            'event_source': 'event_source',
                            'event_time': 'event_time',
                            'event_type': 'event_type',
                            'ip_address': 'ip_address',
                            'user_name': 'user_name',
                            }

    def __init__(self,
                 domain_name=None,
                 event_source=None,
                 event_time=None,
                 event_type=None,
                 ip_address=None,
                 user_name=None,
                ):
        """
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: Domain name
        :type  event_source: :class:`str` or ``None``
        :param event_source: Possible values are: 
            
            * :attr:`LoginLogoutEventMap.EVENT_SOURCE_LI`
        :type  event_time: :class:`long` or ``None``
        :param event_time: Timestamp in milliseconds since epoch format: int64
        :type  event_type: :class:`str` or ``None``
        :param event_type: Possible values are: 
            
            * :attr:`LoginLogoutEventMap.EVENT_TYPE_LOGIN`
            * :attr:`LoginLogoutEventMap.EVENT_TYPE_LOGOUT`
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP Address of user format: ip
        :type  user_name: :class:`str` or ``None``
        :param user_name: User name
        """
        self.domain_name = domain_name
        self.event_source = event_source
        self.event_time = event_time
        self.event_type = event_type
        self.ip_address = ip_address
        self.user_name = user_name
        VapiStruct.__init__(self)


LoginLogoutEventMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.login_logout_event_map', {
        'domain_name': type.OptionalType(type.StringType()),
        'event_source': type.OptionalType(type.StringType()),
        'event_time': type.OptionalType(type.IntegerType()),
        'event_type': type.OptionalType(type.StringType()),
        'ip_address': type.OptionalType(type.StringType()),
        'user_name': type.OptionalType(type.StringType()),
    },
    LoginLogoutEventMap,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 MacAddressCsvListResult(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:`MacTableCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


MacAddressCsvListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mac_address_csv_list_result', {
        'file_name': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MacTableCsvRecord'))),
    },
    MacAddressCsvListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 learnt on this port
            when mac learning is enabled. 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: The maximum number of mac addresses learnt on an overlay logical
            switch, irrespective of whether mac learning is enabled on the
            segment ports. When this limit is reached, traffic for mac
            addresses that are not learnt will be flooded. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 MacTableCsvRecord(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'mac_address': 'mac_address',
                            'rtep_group_id': 'rtep_group_id',
                            'vtep_group_id': 'vtep_group_id',
                            'vtep_ip': 'vtep_ip',
                            'vtep_ipv6': 'vtep_ipv6',
                            'vtep_mac_address': 'vtep_mac_address',
                            }

    def __init__(self,
                 mac_address=None,
                 rtep_group_id=None,
                 vtep_group_id=None,
                 vtep_ip=None,
                 vtep_ipv6=None,
                 vtep_mac_address=None,
                ):
        """
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: The MAC address
        :type  rtep_group_id: :class:`long` or ``None``
        :param rtep_group_id: RTEP group id is applicable when the logical switch is stretched
            across multiple sites. When rtep_group_id is set, mac_address
            represents remote mac_address. format: int64
        :type  vtep_group_id: :class:`long` or ``None``
        :param vtep_group_id: VTEP group id is applicable when the logical switch is stretched
            across multiple sites. When vtep_group_id is set, mac_address
            represents remote mac_address. format: int64
        :type  vtep_ip: :class:`str` or ``None``
        :param vtep_ip: The virtual tunnel endpoint IPv4 address format: ip
        :type  vtep_ipv6: :class:`str` or ``None``
        :param vtep_ipv6: The virtual tunnel endpoint IPv6 address format: ipv6
        :type  vtep_mac_address: :class:`str` or ``None``
        :param vtep_mac_address: The virtual tunnel endpoint MAC address
        """
        self.mac_address = mac_address
        self.rtep_group_id = rtep_group_id
        self.vtep_group_id = vtep_group_id
        self.vtep_ip = vtep_ip
        self.vtep_ipv6 = vtep_ipv6
        self.vtep_mac_address = vtep_mac_address
        VapiStruct.__init__(self)


MacTableCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mac_table_csv_record', {
        'mac_address': type.OptionalType(type.StringType()),
        'rtep_group_id': type.OptionalType(type.IntegerType()),
        'vtep_group_id': type.OptionalType(type.IntegerType()),
        'vtep_ip': type.OptionalType(type.StringType()),
        'vtep_ipv6': type.OptionalType(type.StringType()),
        'vtep_mac_address': type.OptionalType(type.StringType()),
    },
    MacTableCsvRecord,
    False,
    None))



class MacTableEntry(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'mac_address': 'mac_address',
                            'rtep_group_id': 'rtep_group_id',
                            'vtep_group_id': 'vtep_group_id',
                            'vtep_ip': 'vtep_ip',
                            'vtep_ipv6': 'vtep_ipv6',
                            'vtep_mac_address': 'vtep_mac_address',
                            }

    def __init__(self,
                 mac_address=None,
                 rtep_group_id=None,
                 vtep_group_id=None,
                 vtep_ip=None,
                 vtep_ipv6=None,
                 vtep_mac_address=None,
                ):
        """
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: The MAC address
        :type  rtep_group_id: :class:`long` or ``None``
        :param rtep_group_id: RTEP group id is applicable when the logical switch is stretched
            across multiple sites. When rtep_group_id is set, mac_address
            represents remote mac_address. format: int64
        :type  vtep_group_id: :class:`long` or ``None``
        :param vtep_group_id: VTEP group id is applicable when the logical switch is stretched
            across multiple sites. When vtep_group_id is set, mac_address
            represents remote mac_address. format: int64
        :type  vtep_ip: :class:`str` or ``None``
        :param vtep_ip: The virtual tunnel endpoint IPv4 address format: ip
        :type  vtep_ipv6: :class:`str` or ``None``
        :param vtep_ipv6: The virtual tunnel endpoint IPv6 address format: ipv6
        :type  vtep_mac_address: :class:`str` or ``None``
        :param vtep_mac_address: The virtual tunnel endpoint MAC address
        """
        self.mac_address = mac_address
        self.rtep_group_id = rtep_group_id
        self.vtep_group_id = vtep_group_id
        self.vtep_ip = vtep_ip
        self.vtep_ipv6 = vtep_ipv6
        self.vtep_mac_address = vtep_mac_address
        VapiStruct.__init__(self)


MacTableEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mac_table_entry', {
        'mac_address': type.OptionalType(type.StringType()),
        'rtep_group_id': type.OptionalType(type.IntegerType()),
        'vtep_group_id': type.OptionalType(type.IntegerType()),
        'vtep_ip': type.OptionalType(type.StringType()),
        'vtep_ipv6': type.OptionalType(type.StringType()),
        'vtep_mac_address': type.OptionalType(type.StringType()),
    },
    MacTableEntry,
    False,
    None))



class MalwarePreventionProfile(VapiStruct):
    """
    MalwarePrevention Profile which contains the criteria to include Malware
    Prevention signatures.

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


    """
    DETECTION_TYPE_AND_SANDBOXING_BASED = "SIGNATURE_AND_SANDBOXING_BASED"
    """


    """
    FILE_TYPE_DOCUMENT = "DOCUMENT"
    """


    """
    FILE_TYPE_EXECUTABLE = "EXECUTABLE"
    """


    """
    FILE_TYPE_MEDIA = "MEDIA"
    """


    """
    FILE_TYPE_ARCHIVE = "ARCHIVE"
    """


    """
    FILE_TYPE_DATA = "DATA"
    """


    """
    FILE_TYPE_SCRIPT = "SCRIPT"
    """


    """
    FILE_TYPE_OTHER = "OTHER"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'detection_type': 'detection_type',
                            'file_type': 'file_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 detection_type=None,
                 file_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  detection_type: :class:`str` or ``None``
        :param detection_type: Possible values are: 
            
            * :attr:`MalwarePreventionProfile.DETECTION_TYPE_BASED`
            *
              :attr:`MalwarePreventionProfile.DETECTION_TYPE_AND_SANDBOXING_BASED`
            
            Represents how the Malware Prevention detection works.
        :type  file_type: :class:`list` of :class:`str` or ``None``
        :param file_type: Possible values are: 
            
            * :attr:`MalwarePreventionProfile.FILE_TYPE_DOCUMENT`
            * :attr:`MalwarePreventionProfile.FILE_TYPE_EXECUTABLE`
            * :attr:`MalwarePreventionProfile.FILE_TYPE_MEDIA`
            * :attr:`MalwarePreventionProfile.FILE_TYPE_ARCHIVE`
            * :attr:`MalwarePreventionProfile.FILE_TYPE_DATA`
            * :attr:`MalwarePreventionProfile.FILE_TYPE_SCRIPT`
            * :attr:`MalwarePreventionProfile.FILE_TYPE_OTHER`
            
            Represents different type of files extensions supported in Malware
            Prevention.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.detection_type = detection_type
        self.file_type = file_type
        VapiStruct.__init__(self)


MalwarePreventionProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.malware_prevention_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'detection_type': type.OptionalType(type.StringType()),
        'file_type': type.OptionalType(type.ListType(type.StringType())),
    },
    MalwarePreventionProfile,
    False,
    None))



class MalwarePreventionProfileListResult(VapiStruct):
    """
    Paged collection of Malware Prevention 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_: 
        :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:`MalwarePreventionProfile` or ``None``
        :param results: Malware Prevention 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)


MalwarePreventionProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.malware_prevention_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__, 'MalwarePreventionProfile'))),
    },
    MalwarePreventionProfileListResult,
    False,
    None))



class MalwarePreventionSignature(VapiStruct):
    """
    Malware Prevention Signature .

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'file_type': 'file_type',
                            'signature_id': 'signature_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 file_type=None,
                 signature_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  file_type: :class:`str` or ``None``
        :param file_type: File type of Signature.
        :type  signature_id: :class:`str` or ``None``
        :param signature_id: Represents the Signature's id.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.file_type = file_type
        self.signature_id = signature_id
        VapiStruct.__init__(self)


MalwarePreventionSignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.malware_prevention_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'file_type': type.OptionalType(type.StringType()),
        'signature_id': type.OptionalType(type.StringType()),
    },
    MalwarePreventionSignature,
    False,
    None))



class MalwarePreventionSignatureListResult(VapiStruct):
    """
    Paged collection of MalwarePrevention 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_: 
        :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:`MalwarePreventionSignature` or ``None``
        :param results: MalwarePrevention 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)


MalwarePreventionSignatureListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.malware_prevention_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__, 'MalwarePreventionSignature'))),
    },
    MalwarePreventionSignatureListResult,
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 MetadataProxyStatisticsPerSegment(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'error_responses_from_nova_server': 'error_responses_from_nova_server',
                            'requests_from_clients': 'requests_from_clients',
                            'requests_to_nova_server': 'requests_to_nova_server',
                            'responses_to_clients': 'responses_to_clients',
                            'segment_path': 'segment_path',
                            'succeeded_responses_from_nova_server': 'succeeded_responses_from_nova_server',
                            }

    def __init__(self,
                 error_responses_from_nova_server=None,
                 requests_from_clients=None,
                 requests_to_nova_server=None,
                 responses_to_clients=None,
                 segment_path=None,
                 succeeded_responses_from_nova_server=None,
                ):
        """
        :type  error_responses_from_nova_server: :class:`long` or ``None``
        :param error_responses_from_nova_server: error responses from nova server format: int64
        :type  requests_from_clients: :class:`long` or ``None``
        :param requests_from_clients: requests from clients format: int64
        :type  requests_to_nova_server: :class:`long` or ``None``
        :param requests_to_nova_server: requests to nova server format: int64
        :type  responses_to_clients: :class:`long` or ``None``
        :param responses_to_clients: responses to clients format: int64
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Policy path of the attached segment
        :type  succeeded_responses_from_nova_server: :class:`long` or ``None``
        :param succeeded_responses_from_nova_server: succeeded responses from nova server format: int64
        """
        self.error_responses_from_nova_server = error_responses_from_nova_server
        self.requests_from_clients = requests_from_clients
        self.requests_to_nova_server = requests_to_nova_server
        self.responses_to_clients = responses_to_clients
        self.segment_path = segment_path
        self.succeeded_responses_from_nova_server = succeeded_responses_from_nova_server
        VapiStruct.__init__(self)


MetadataProxyStatisticsPerSegment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.metadata_proxy_statistics_per_segment', {
        'error_responses_from_nova_server': type.OptionalType(type.IntegerType()),
        'requests_from_clients': type.OptionalType(type.IntegerType()),
        'requests_to_nova_server': type.OptionalType(type.IntegerType()),
        'responses_to_clients': type.OptionalType(type.IntegerType()),
        'segment_path': type.OptionalType(type.StringType()),
        'succeeded_responses_from_nova_server': type.OptionalType(type.IntegerType()),
    },
    MetadataProxyStatisticsPerSegment,
    False,
    None))



class MetricsAgent(VapiStruct):
    """
    Intent resource created for Metrics

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


    """
    ADMIN_ACTION_OFFBOARD = "OFFBOARD"
    """


    """
    ADMIN_ACTION_FORCE_OFFBOARD = "FORCE_OFFBOARD"
    """


    """
    LOG_LEVEL_INFO = "INFO"
    """


    """
    LOG_LEVEL_DEBUG = "DEBUG"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'admin_action': 'admin_action',
                            'correlation_id': 'correlation_id',
                            'instance_id': 'instance_id',
                            'log_level': 'log_level',
                            'org_id': 'org_id',
                            'receiver_endpoint': 'receiver_endpoint',
                            'enable_time_series_metrics_ingestion': 'enable_time_series_metrics_ingestion',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 admin_action=None,
                 correlation_id=None,
                 instance_id=None,
                 log_level=None,
                 org_id=None,
                 receiver_endpoint=None,
                 enable_time_series_metrics_ingestion=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  admin_action: :class:`str` or ``None``
        :param admin_action: Possible values are: 
            
            * :attr:`MetricsAgent.ADMIN_ACTION_ONBOARD`
            * :attr:`MetricsAgent.ADMIN_ACTION_OFFBOARD`
            * :attr:`MetricsAgent.ADMIN_ACTION_FORCE_OFFBOARD`
            
            Action to perform for NSX+ agents
        :type  correlation_id: :class:`str` or ``None``
        :param correlation_id: Unique identifier created by DGS
        :type  instance_id: :class:`str` or ``None``
        :param instance_id: Id of the NSX+ Instance where the site is onboarded.
        :type  log_level: :class:`str` or ``None``
        :param log_level: Possible values are: 
            
            * :attr:`MetricsAgent.LOG_LEVEL_INFO`
            * :attr:`MetricsAgent.LOG_LEVEL_DEBUG`
            
            Configure log level for NSX+ agents
        :type  org_id: :class:`str` or ``None``
        :param org_id: Id of the NSX+ Organization where the site is onboarded.
        :type  receiver_endpoint: :class:`str` or ``None``
        :param receiver_endpoint: Receiver endpoint used by NSX+ agents to communicate with the cloud
        :type  enable_time_series_metrics_ingestion: :class:`bool` or ``None``
        :param enable_time_series_metrics_ingestion: This flag denotes if metrics agent is configured to ingest
            timeseries metrics 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.admin_action = admin_action
        self.correlation_id = correlation_id
        self.instance_id = instance_id
        self.log_level = log_level
        self.org_id = org_id
        self.receiver_endpoint = receiver_endpoint
        self.enable_time_series_metrics_ingestion = enable_time_series_metrics_ingestion
        VapiStruct.__init__(self)


MetricsAgent._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.metrics_agent', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'admin_action': type.OptionalType(type.StringType()),
        'correlation_id': type.OptionalType(type.StringType()),
        'instance_id': type.OptionalType(type.StringType()),
        'log_level': type.OptionalType(type.StringType()),
        'org_id': type.OptionalType(type.StringType()),
        'receiver_endpoint': type.OptionalType(type.StringType()),
        'enable_time_series_metrics_ingestion': type.OptionalType(type.BooleanType()),
    },
    MetricsAgent,
    False,
    None))



class MirrorStackStatusListResult(VapiStruct):
    """


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


    """
    OVERALL_STATUS_SUCCESS = "SUCCESS"
    """


    """
    OVERALL_STATUS_FAILED = "FAILED"
    """


    """



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

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 overall_status=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_: 
        :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  overall_status: :class:`str` or ``None``
        :param overall_status: Possible values are: 
            
            * :attr:`MirrorStackStatusListResult.OVERALL_STATUS_UNKNOWN`
            * :attr:`MirrorStackStatusListResult.OVERALL_STATUS_SUCCESS`
            * :attr:`MirrorStackStatusListResult.OVERALL_STATUS_FAILED`
            
            SUCCESS if all the TN's stack status are SUCCESS, FAILED if some of
            the TN's stack status are FAILED.
        :type  results: :class:`list` of :class:`TnNodeStackSpanStatus` or ``None``
        :param results: List all TN nodes which spaned in remote L3 mirror session mirror
            stack health status detailed info, including mirror stack status,
            vmknic status, TN node ID, TN node name and last updated status
            timestamp.
        """
        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.overall_status = overall_status
        self.results = results
        VapiStruct.__init__(self)


MirrorStackStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mirror_stack_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()),
        'overall_status': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TnNodeStackSpanStatus'))),
    },
    MirrorStackStatusListResult,
    False,
    None))



class MiscConfig(VapiStruct):
    """
    These are miscellaneous configuration options.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "MiscConfig"
    """
    Identifier denoting this class, when it is used 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 = {
                            'uplink_rx_ring_size': 'uplink_rx_ring_size',
                            'uplink_tx_ring_size': 'uplink_tx_ring_size',
                            'high_performance_config_params': 'high_performance_config_params',
                            'high_performance_config_type': 'high_performance_config_type',
                            'version': 'version',
                            }

    def __init__(self,
                 uplink_rx_ring_size=None,
                 uplink_tx_ring_size=None,
                 high_performance_config_params=None,
                 high_performance_config_type='MiscConfig',
                 version=None,
                ):
        """
        :type  uplink_rx_ring_size: :class:`long` or ``None``
        :param uplink_rx_ring_size: This property will be required to change the RX ring size of all
            uplinks in DVS. It should be in multiples of 32. format: int32
        :type  uplink_tx_ring_size: :class:`long` or ``None``
        :param uplink_tx_ring_size: This property will be required to change the TX ring size of all
            uplinks in DVS. It should be in multiples of 32. format: int32
        :type  high_performance_config_params: :class:`list` of :class:`HighPerformanceConfigParams` or ``None``
        :param high_performance_config_params: List of parameters that could be used to configure high
            performance.
        :type  high_performance_config_type: :class:`str`
        :param high_performance_config_type: Possible values are: 
            
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_ADV_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_DRIVER_CONFIG`
            *
              :attr:`HighPerformanceConfig.HIGH_PERFORMANCE_CONFIG_TYPE_MISC_CONFIG`
            
            The specific type of config.
        :type  version: :class:`list` of :class:`str` or ``None``
        :param version: Based on the high_performance_config_type, it could be either
            driver version or host version. For high_performance_config_type as
            ADV_CONFIG or MISC_CONFIG, this represents host version. For
            high_performance_config_type as DRIVER_CONFIG, this represents
            physical NIC driver version.
        """
        self.uplink_rx_ring_size = uplink_rx_ring_size
        self.uplink_tx_ring_size = uplink_tx_ring_size
        self.high_performance_config_params = high_performance_config_params
        self._high_performance_config_type = high_performance_config_type
        self.version = version
        VapiStruct.__init__(self)

    @property
    def high_performance_config_type(self):
        """
        Return the discriminator value
        """
        return self._high_performance_config_type

MiscConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.misc_config', {
        'uplink_rx_ring_size': type.OptionalType(type.IntegerType()),
        'uplink_tx_ring_size': type.OptionalType(type.IntegerType()),
        'high_performance_config_params': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HighPerformanceConfigParams'))),
        'high_performance_config_type': type.StringType(),
        'version': type.OptionalType(type.ListType(type.StringType())),
    },
    MiscConfig,
    False,
    None))



class MitreAttack(VapiStruct):
    """
    Contain Mitre attack details like tacticName, tacticUrl, techniqueName and
    techniqueUrl.

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



    _canonical_to_pep_names = {
                            'tactic_name': 'tactic_name',
                            'tactic_url': 'tactic_url',
                            'technique_name': 'technique_name',
                            'technique_url': 'technique_url',
                            }

    def __init__(self,
                 tactic_name=None,
                 tactic_url=None,
                 technique_name=None,
                 technique_url=None,
                ):
        """
        :type  tactic_name: :class:`str` or ``None``
        :param tactic_name: Represents tactic name of attack.
        :type  tactic_url: :class:`str` or ``None``
        :param tactic_url: Represents tactic url of attack.
        :type  technique_name: :class:`str` or ``None``
        :param technique_name: Represents technique name of attack.
        :type  technique_url: :class:`str` or ``None``
        :param technique_url: Represents technique url of attack.
        """
        self.tactic_name = tactic_name
        self.tactic_url = tactic_url
        self.technique_name = technique_name
        self.technique_url = technique_url
        VapiStruct.__init__(self)


MitreAttack._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mitre_attack', {
        'tactic_name': type.OptionalType(type.StringType()),
        'tactic_url': type.OptionalType(type.StringType()),
        'technique_name': type.OptionalType(type.StringType()),
        'technique_url': type.OptionalType(type.StringType()),
    },
    MitreAttack,
    False,
    None))



class MonitoringError(VapiStruct):
    """
    Monitoring information is gathered from multiple sub-systems/components,
    using REST or RPC calls internally. It is quite possible for a component or
    sub-system fail, in which case it is captured as an error and reported.

    .. 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',
                            'params': 'params',
                            }

    def __init__(self,
                 error_code=None,
                 error_message=None,
                 params=None,
                ):
        """
        :type  error_code: :class:`long` or ``None``
        :param error_code: NSX error code if available format: int64
        :type  error_message: :class:`str` or ``None``
        :param error_message: Error mesage
        :type  params: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param params: Parameters for construcing error details
        """
        self.error_code = error_code
        self.error_message = error_message
        self.params = params
        VapiStruct.__init__(self)


MonitoringError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.monitoring_error', {
        'error_code': type.OptionalType(type.IntegerType()),
        'error_message': type.OptionalType(type.StringType()),
        'params': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct))),
    },
    MonitoringError,
    False,
    None))



class MonitoringInfo(VapiStruct):
    """
    Provides monitoring information for all flows in federation from the given
    site where the API is invoked. For example - monitoring information from
    Global Manager doesn't provide details of Local Manager to Local Manager
    flows. Similary, LocalManager will not provide Global Manager ACTIVE to
    Global Manager STANDBY flow details.

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



    _canonical_to_pep_names = {
                            'errors': 'errors',
                            'flow_info': 'flow_info',
                            }

    def __init__(self,
                 errors=None,
                 flow_info=None,
                ):
        """
        :type  errors: :class:`list` of :class:`MonitoringError` or ``None``
        :param errors: All errors occurred while gathering monitoring info
        :type  flow_info: :class:`list` of :class:`FlowInfo` or ``None``
        :param flow_info: Monitoring information of flows in federation
        """
        self.errors = errors
        self.flow_info = flow_info
        VapiStruct.__init__(self)


MonitoringInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.monitoring_info', {
        'errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MonitoringError'))),
        'flow_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FlowInfo'))),
    },
    MonitoringInfo,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 MpOspfExternalLinkState(VapiStruct):
    """
    OSPF router link state details.

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



    _canonical_to_pep_names = {
                            'advertised_router': 'advertised_router',
                            'checksum': 'checksum',
                            'link_state_id': 'link_state_id',
                            'metric_type': 'metric_type',
                            'route': 'route',
                            'sequence_number': 'sequence_number',
                            'tag': 'tag',
                            'up_time': 'up_time',
                            }

    def __init__(self,
                 advertised_router=None,
                 checksum=None,
                 link_state_id=None,
                 metric_type=None,
                 route=None,
                 sequence_number=None,
                 tag=None,
                 up_time=None,
                ):
        """
        :type  advertised_router: :class:`str` or ``None``
        :param advertised_router: OSPF advertised 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  checksum: :class:`str` or ``None``
        :param checksum: Cost of the route
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  link_state_id: :class:`str` or ``None``
        :param link_state_id: OSPF link 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  metric_type: :class:`str` or ``None``
        :param metric_type: Type of metric
            This 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: :class:`str` or ``None``
        :param route: Route with ip address and mask 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  sequence_number: :class:`str` or ``None``
        :param sequence_number: Sequence 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  tag: :class:`long` or ``None``
        :param tag: Tag format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  up_time: :class:`long` or ``None``
        :param up_time: LSA age format: int64
            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.advertised_router = advertised_router
        self.checksum = checksum
        self.link_state_id = link_state_id
        self.metric_type = metric_type
        self.route = route
        self.sequence_number = sequence_number
        self.tag = tag
        self.up_time = up_time
        VapiStruct.__init__(self)


MpOspfExternalLinkState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mp_ospf_external_link_state', {
        'advertised_router': type.OptionalType(type.StringType()),
        'checksum': type.OptionalType(type.StringType()),
        'link_state_id': type.OptionalType(type.StringType()),
        'metric_type': type.OptionalType(type.StringType()),
        'route': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.StringType()),
        'tag': type.OptionalType(type.IntegerType()),
        'up_time': type.OptionalType(type.IntegerType()),
    },
    MpOspfExternalLinkState,
    False,
    None))



class MpOspfNetworkLinkStates(VapiStruct):
    """
    OSPF router link state details.

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



    _canonical_to_pep_names = {
                            'advertised_router': 'advertised_router',
                            'checksum': 'checksum',
                            'link_state_id': 'link_state_id',
                            'sequence_number': 'sequence_number',
                            'up_time': 'up_time',
                            }

    def __init__(self,
                 advertised_router=None,
                 checksum=None,
                 link_state_id=None,
                 sequence_number=None,
                 up_time=None,
                ):
        """
        :type  advertised_router: :class:`str` or ``None``
        :param advertised_router: OSPF advertised 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  checksum: :class:`str` or ``None``
        :param checksum: Cost of the route
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  link_state_id: :class:`str` or ``None``
        :param link_state_id: OSPF link 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  sequence_number: :class:`str` or ``None``
        :param sequence_number: Sequence 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  up_time: :class:`long` or ``None``
        :param up_time: LSA age format: int64
            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.advertised_router = advertised_router
        self.checksum = checksum
        self.link_state_id = link_state_id
        self.sequence_number = sequence_number
        self.up_time = up_time
        VapiStruct.__init__(self)


MpOspfNetworkLinkStates._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mp_ospf_network_link_states', {
        'advertised_router': type.OptionalType(type.StringType()),
        'checksum': type.OptionalType(type.StringType()),
        'link_state_id': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.StringType()),
        'up_time': type.OptionalType(type.IntegerType()),
    },
    MpOspfNetworkLinkStates,
    False,
    None))



class MpOspfRouterLinkStates(VapiStruct):
    """
    OSPF router link state details.

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



    _canonical_to_pep_names = {
                            'advertised_router': 'advertised_router',
                            'checksum': 'checksum',
                            'link_state_id': 'link_state_id',
                            'router_links': 'router_links',
                            'sequence_number': 'sequence_number',
                            'up_time': 'up_time',
                            }

    def __init__(self,
                 advertised_router=None,
                 checksum=None,
                 link_state_id=None,
                 router_links=None,
                 sequence_number=None,
                 up_time=None,
                ):
        """
        :type  advertised_router: :class:`str` or ``None``
        :param advertised_router: OSPF advertised 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  checksum: :class:`str` or ``None``
        :param checksum: Cost of the route
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  link_state_id: :class:`str` or ``None``
        :param link_state_id: OSPF link 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  router_links: :class:`long` or ``None``
        :param router_links: Number of router links format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sequence_number: :class:`str` or ``None``
        :param sequence_number: Sequence 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  up_time: :class:`long` or ``None``
        :param up_time: LSA age format: int64
            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.advertised_router = advertised_router
        self.checksum = checksum
        self.link_state_id = link_state_id
        self.router_links = router_links
        self.sequence_number = sequence_number
        self.up_time = up_time
        VapiStruct.__init__(self)


MpOspfRouterLinkStates._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mp_ospf_router_link_states', {
        'advertised_router': type.OptionalType(type.StringType()),
        'checksum': type.OptionalType(type.StringType()),
        'link_state_id': type.OptionalType(type.StringType()),
        'router_links': type.OptionalType(type.IntegerType()),
        'sequence_number': type.OptionalType(type.StringType()),
        'up_time': type.OptionalType(type.IntegerType()),
    },
    MpOspfRouterLinkStates,
    False,
    None))



class MpOspfSummaryLinkStates(VapiStruct):
    """
    OSPF summary link state details.

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



    _canonical_to_pep_names = {
                            'advertised_router': 'advertised_router',
                            'checksum': 'checksum',
                            'link_state_id': 'link_state_id',
                            'sequence_number': 'sequence_number',
                            'summary_address': 'summary_address',
                            'up_time': 'up_time',
                            }

    def __init__(self,
                 advertised_router=None,
                 checksum=None,
                 link_state_id=None,
                 sequence_number=None,
                 summary_address=None,
                 up_time=None,
                ):
        """
        :type  advertised_router: :class:`str` or ``None``
        :param advertised_router: OSPF advertised 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  checksum: :class:`str` or ``None``
        :param checksum: Cost of the route
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  link_state_id: :class:`str` or ``None``
        :param link_state_id: OSPF link 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  sequence_number: :class:`str` or ``None``
        :param sequence_number: Sequence 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  summary_address: :class:`str` or ``None``
        :param summary_address: OSPF summary 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  up_time: :class:`long` or ``None``
        :param up_time: LSA age format: int64
            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.advertised_router = advertised_router
        self.checksum = checksum
        self.link_state_id = link_state_id
        self.sequence_number = sequence_number
        self.summary_address = summary_address
        self.up_time = up_time
        VapiStruct.__init__(self)


MpOspfSummaryLinkStates._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mp_ospf_summary_link_states', {
        'advertised_router': type.OptionalType(type.StringType()),
        'checksum': type.OptionalType(type.StringType()),
        'link_state_id': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.StringType()),
        'summary_address': type.OptionalType(type.StringType()),
        'up_time': type.OptionalType(type.IntegerType()),
    },
    MpOspfSummaryLinkStates,
    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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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: 
        :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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'edge_path': 'edge_path',
                            'mcast_routes': 'mcast_routes',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 edge_path=None,
                 mcast_routes=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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 to edge node.
        :type  mcast_routes: :class:`list` of :class:`MulticastRoute` or ``None``
        :param mcast_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.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', {
        '_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()),
        'mcast_routes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastRoute'))),
    },
    MulticastRoutesPerEdge,
    False,
    None))



class NDRAAdvertisedRoute(VapiStruct):
    """


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


    """
    ROUTE_PREFERENCE_MEDIUM = "MEDIUM"
    """


    """
    ROUTE_PREFERENCE_HIGH = "HIGH"
    """


    """
    ROUTE_PREFERENCE_RESERVED = "RESERVED"
    """


    """



    _canonical_to_pep_names = {
                            'route_lifetime': 'route_lifetime',
                            'route_preference': 'route_preference',
                            'subnet': 'subnet',
                            }

    def __init__(self,
                 route_lifetime=None,
                 route_preference=None,
                 subnet=None,
                ):
        """
        :type  route_lifetime: :class:`long` or ``None``
        :param route_lifetime: Lifetime of advertised route in seconds. format: int64
        :type  route_preference: :class:`str` or ``None``
        :param route_preference: Possible values are: 
            
            * :attr:`NDRAAdvertisedRoute.ROUTE_PREFERENCE_LOW`
            * :attr:`NDRAAdvertisedRoute.ROUTE_PREFERENCE_MEDIUM`
            * :attr:`NDRAAdvertisedRoute.ROUTE_PREFERENCE_HIGH`
            * :attr:`NDRAAdvertisedRoute.ROUTE_PREFERENCE_RESERVED`
            
            NDRA Route preference. Indicates preference of the router
            associated with a prefix over others, when multiple identical
            prefixes (for different routers) have been received.
        :type  subnet: :class:`str` or ``None``
        :param subnet: Advertised route subnet format: ipv6-cidr-block
        """
        self.route_lifetime = route_lifetime
        self.route_preference = route_preference
        self.subnet = subnet
        VapiStruct.__init__(self)


NDRAAdvertisedRoute._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.NDRA_advertised_route', {
        'route_lifetime': type.OptionalType(type.IntegerType()),
        'route_preference': type.OptionalType(type.StringType()),
        'subnet': type.OptionalType(type.StringType()),
    },
    NDRAAdvertisedRoute,
    False,
    None))



class NSXManagerDeploymentInfo(VapiStruct):
    """
    Deployment Details of NSX Manager deployed via VCF

    .. 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',
                            'deployed_by': 'deployed_by',
                            'instance_id': 'instance_id',
                            'log_token': 'log_token',
                            'managed_by': 'managed_by',
                            '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,
                 deployed_by=None,
                 instance_id=None,
                 log_token=None,
                 managed_by=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  deployed_by: :class:`str` or ``None``
        :param deployed_by: Deployed By
        :type  instance_id: :class:`str` or ``None``
        :param instance_id: Instance Id
        :type  log_token: :class:`str` or ``None``
        :param log_token: Log Token
        :type  managed_by: :class:`str` or ``None``
        :param managed_by: Managed By
        :type  version: :class:`str` or ``None``
        :param version: Version
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.deployed_by = deployed_by
        self.instance_id = instance_id
        self.log_token = log_token
        self.managed_by = managed_by
        self.version = version
        VapiStruct.__init__(self)


NSXManagerDeploymentInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.NSX_manager_deployment_info', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'deployed_by': type.OptionalType(type.StringType()),
        'instance_id': type.OptionalType(type.StringType()),
        'log_token': type.OptionalType(type.StringType()),
        'managed_by': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
    },
    NSXManagerDeploymentInfo,
    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.

            .. deprecated:: unknown
        :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.

            .. deprecated:: unknown
        :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`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_AVICONNECTIONINFO`
            
            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`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_AVICONNECTIONINFO`
            
            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 NamedTeamingPolicy(VapiStruct):
    """
    Uplink Teaming Policy with a name that can be referenced by logical
    switches

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


    """
    POLICY_LOADBALANCE_SRCID = "LOADBALANCE_SRCID"
    """


    """
    POLICY_LOADBALANCE_SRC_MAC = "LOADBALANCE_SRC_MAC"
    """


    """



    _canonical_to_pep_names = {
                            'active_list': 'active_list',
                            'policy': 'policy',
                            'rolling_order': 'rolling_order',
                            'standby_list': 'standby_list',
                            'name': 'name',
                            }

    def __init__(self,
                 active_list=None,
                 policy=None,
                 rolling_order=None,
                 standby_list=None,
                 name=None,
                ):
        """
        :type  active_list: :class:`list` of :class:`Uplink` or ``None``
        :param active_list: List of Uplinks used in active list
        :type  policy: :class:`str` or ``None``
        :param policy: Possible values are: 
            
            * :attr:`NamedTeamingPolicy.POLICY_FAILOVER_ORDER`
            * :attr:`NamedTeamingPolicy.POLICY_LOADBALANCE_SRCID`
            * :attr:`NamedTeamingPolicy.POLICY_LOADBALANCE_SRC_MAC`
            
            Teaming policy
        :type  rolling_order: :class:`bool` or ``None``
        :param rolling_order: Flag for preemptive mode
        :type  standby_list: :class:`list` of :class:`Uplink` or ``None``
        :param standby_list: List of Uplinks used in standby list
        :type  name: :class:`str` or ``None``
        :param name: An uplink teaming policy of a given name defined in
            UplinkHostSwitchProfile. The names of all NamedTeamingPolicies in
            an UplinkHostSwitchProfile must be different, but a name can be
            shared by different UplinkHostSwitchProfiles. Different
            TransportNodes can use different NamedTeamingPolicies having the
            same name in different UplinkHostSwitchProfiles to realize an
            uplink teaming policy on a logical switch. An uplink teaming policy
            on a logical switch can be any policy defined by a user; it does
            not have to be a single type of FAILOVER or LOADBALANCE. It can be
            a combination of types, for instance, a user can define a policy
            with name \"MyHybridTeamingPolicy\" as \"FAILOVER on all ESX
            TransportNodes and LOADBALANCE on all KVM TransportNodes\". The
            name is the key of the teaming policy and can not be changed once
            assigned.
        """
        self.active_list = active_list
        self.policy = policy
        self.rolling_order = rolling_order
        self.standby_list = standby_list
        self.name = name
        VapiStruct.__init__(self)


NamedTeamingPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.named_teaming_policy', {
        'active_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Uplink'))),
        'policy': type.OptionalType(type.StringType()),
        'rolling_order': type.OptionalType(type.BooleanType()),
        'standby_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Uplink'))),
        'name': type.OptionalType(type.StringType()),
    },
    NamedTeamingPolicy,
    False,
    None))



class NamespaceMemberDetails(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',
                            'pods': 'pods',
                            }

    def __init__(self,
                 display_name=None,
                 id=None,
                 pods=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  pods: :class:`list` of :class:`PolicyGroupMemberDetails` or ``None``
        :param pods: 
        """
        self.display_name = display_name
        self.id = id
        self.pods = pods
        VapiStruct.__init__(self)


NamespaceMemberDetails._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.namespace_member_details', {
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'pods': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupMemberDetails'))),
    },
    NamespaceMemberDetails,
    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 NeighborProperties(VapiStruct):
    """
    Neighbor properties

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



    _canonical_to_pep_names = {
                            'capabilities': 'capabilities',
                            'enabled_capabilities': 'enabled_capabilities',
                            'ifindex': 'ifindex',
                            'link_aggregation_capable': 'link_aggregation_capable',
                            'link_aggregation_port_id': 'link_aggregation_port_id',
                            'link_aggregation_status': 'link_aggregation_status',
                            'mac': 'mac',
                            'mgmt_addr': 'mgmt_addr',
                            'name': 'name',
                            'oid': 'oid',
                            'port_desc': 'port_desc',
                            'system_desc': 'system_desc',
                            'system_name': 'system_name',
                            'system_port_number': 'system_port_number',
                            }

    def __init__(self,
                 capabilities=None,
                 enabled_capabilities=None,
                 ifindex=None,
                 link_aggregation_capable=None,
                 link_aggregation_port_id=None,
                 link_aggregation_status=None,
                 mac=None,
                 mgmt_addr=None,
                 name=None,
                 oid=None,
                 port_desc=None,
                 system_desc=None,
                 system_name=None,
                 system_port_number=None,
                ):
        """
        :type  capabilities: :class:`str` or ``None``
        :param capabilities: Capabilities
            This 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_capabilities: :class:`str` or ``None``
        :param enabled_capabilities: Enabled capabilities
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ifindex: :class:`long` or ``None``
        :param ifindex: Interface index format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  link_aggregation_capable: :class:`bool` or ``None``
        :param link_aggregation_capable: Aggregation Capability
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  link_aggregation_port_id: :class:`str` or ``None``
        :param link_aggregation_port_id: Aggregation port 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  link_aggregation_status: :class:`bool` or ``None``
        :param link_aggregation_status: True if currently in aggregation
            This 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: :class:`str` or ``None``
        :param mac: Interface 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  mgmt_addr: :class:`str` or ``None``
        :param mgmt_addr: Management 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  name: :class:`str` or ``None``
        :param name: Interface 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  oid: :class:`str` or ``None``
        :param oid: Object 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  port_desc: :class:`str` or ``None``
        :param port_desc: Port 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  system_desc: :class:`str` or ``None``
        :param system_desc: System 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  system_name: :class:`str` or ``None``
        :param system_name: System 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  system_port_number: :class:`long` or ``None``
        :param system_port_number: System port 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.capabilities = capabilities
        self.enabled_capabilities = enabled_capabilities
        self.ifindex = ifindex
        self.link_aggregation_capable = link_aggregation_capable
        self.link_aggregation_port_id = link_aggregation_port_id
        self.link_aggregation_status = link_aggregation_status
        self.mac = mac
        self.mgmt_addr = mgmt_addr
        self.name = name
        self.oid = oid
        self.port_desc = port_desc
        self.system_desc = system_desc
        self.system_name = system_name
        self.system_port_number = system_port_number
        VapiStruct.__init__(self)


NeighborProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.neighbor_properties', {
        'capabilities': type.OptionalType(type.StringType()),
        'enabled_capabilities': type.OptionalType(type.StringType()),
        'ifindex': type.OptionalType(type.IntegerType()),
        'link_aggregation_capable': type.OptionalType(type.BooleanType()),
        'link_aggregation_port_id': type.OptionalType(type.StringType()),
        'link_aggregation_status': type.OptionalType(type.BooleanType()),
        'mac': type.OptionalType(type.StringType()),
        'mgmt_addr': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'oid': type.OptionalType(type.StringType()),
        'port_desc': type.OptionalType(type.StringType()),
        'system_desc': type.OptionalType(type.StringType()),
        'system_name': type.OptionalType(type.StringType()),
        'system_port_number': type.OptionalType(type.IntegerType()),
    },
    NeighborProperties,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 NetworkInfo(VapiStruct):
    """
    Only support IP address or subnet. Its type can be of IPv4 or IPv6. It will
    be converted to subnet when netmask is specified(e.g., 192.168.1.3/24 =>
    192.168.1.0/24, 2008:12:12:12::2/64 => 2008:12:12:12::/64).

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



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

    def __init__(self,
                 dst_ip=None,
                 src_ip=None,
                ):
        """
        :type  dst_ip: :class:`str` or ``None``
        :param dst_ip: The destination IP can be an IP address or a subnet. format:
            address-or-block-or-range
        :type  src_ip: :class:`str` or ``None``
        :param src_ip: The source IP can be an IP address or a subnet. format:
            address-or-block-or-range
        """
        self.dst_ip = dst_ip
        self.src_ip = src_ip
        VapiStruct.__init__(self)


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



class NewRole(VapiStruct):
    """
    New Role

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



    _canonical_to_pep_names = {
                            'new_role_description': 'new_role_description',
                            'new_role_id': 'new_role_id',
                            'new_role_name': 'new_role_name',
                            }

    def __init__(self,
                 new_role_description=None,
                 new_role_id=None,
                 new_role_name=None,
                ):
        """
        :type  new_role_description: :class:`str` or ``None``
        :param new_role_description: New role description
        :type  new_role_id: :class:`str` or ``None``
        :param new_role_id: New role id
        :type  new_role_name: :class:`str` or ``None``
        :param new_role_name: New role name
        """
        self.new_role_description = new_role_description
        self.new_role_id = new_role_id
        self.new_role_name = new_role_name
        VapiStruct.__init__(self)


NewRole._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.new_role', {
        'new_role_description': type.OptionalType(type.StringType()),
        'new_role_id': type.OptionalType(type.StringType()),
        'new_role_name': type.OptionalType(type.StringType()),
    },
    NewRole,
    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 and MPS. 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 NoIpv4(VapiStruct):
    """
    This type can be specified in ip assignment spec of host switch if no IPv4
    assignment is desired for host switch virtual tunnel endpoints.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NoIpv4"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='NoIpv4',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPPOOLSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCP`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPMACLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_NOIPV4`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class NoIpv6(VapiStruct):
    """
    This type can be specified in ipv6 assignment spec of host switch if no
    IPv6 assignment is desired for host switch virtual tunnel endpoints.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NoIpv6"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='NoIpv6',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6POOLSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6LISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCPV6`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6MACLISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYAUTOCONF`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_NOIPV6`
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class NodeFileSystemProperties(VapiStruct):
    """
    File system properties

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



    _canonical_to_pep_names = {
                            'file_system': 'file_system',
                            'mount': 'mount',
                            'total': 'total',
                            'type': 'type',
                            'used': 'used',
                            }

    def __init__(self,
                 file_system=None,
                 mount=None,
                 total=None,
                 type=None,
                 used=None,
                ):
        """
        :type  file_system: :class:`str` or ``None``
        :param file_system: File system 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  mount: :class:`str` or ``None``
        :param mount: File system mount
            This 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: :class:`long` or ``None``
        :param total: File system size in kilobytes format: int64
            This 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: File system 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  used: :class:`long` or ``None``
        :param used: Amount of file system used in kilobytes format: int64
            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.file_system = file_system
        self.mount = mount
        self.total = total
        self.type = type
        self.used = used
        VapiStruct.__init__(self)


NodeFileSystemProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.node_file_system_properties', {
        'file_system': type.OptionalType(type.StringType()),
        'mount': type.OptionalType(type.StringType()),
        'total': type.OptionalType(type.IntegerType()),
        'type': type.OptionalType(type.StringType()),
        'used': type.OptionalType(type.IntegerType()),
    },
    NodeFileSystemProperties,
    False,
    None))



class NodeResources(VapiStruct):
    """
    Required node resources to deploy a form factor

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



    _canonical_to_pep_names = {
                            'cpu': 'cpu',
                            'disk': 'disk',
                            'ephemeral_storage': 'ephemeral_storage',
                            'number_of_master_nodes': 'number_of_master_nodes',
                            'number_of_worker_nodes': 'number_of_worker_nodes',
                            'ram': 'ram',
                            }

    def __init__(self,
                 cpu=None,
                 disk=None,
                 ephemeral_storage=None,
                 number_of_master_nodes=None,
                 number_of_worker_nodes=None,
                 ram=None,
                ):
        """
        :type  cpu: :class:`long` or ``None``
        :param cpu: Number of CPU cores required to deploy a form factor. format: int64
        :type  disk: :class:`long` or ``None``
        :param disk: Disk required to deploy a form factor. format: int64
        :type  ephemeral_storage: :class:`long` or ``None``
        :param ephemeral_storage: Transient storage required to deploy a form factor. format: int64
        :type  number_of_master_nodes: :class:`long` or ``None``
        :param number_of_master_nodes: Required number of primary nodes. format: int64
        :type  number_of_worker_nodes: :class:`long` or ``None``
        :param number_of_worker_nodes: Required number of worker nodes. format: int64
        :type  ram: :class:`long` or ``None``
        :param ram: Memore required to deploy a form factor. format: int64
        """
        self.cpu = cpu
        self.disk = disk
        self.ephemeral_storage = ephemeral_storage
        self.number_of_master_nodes = number_of_master_nodes
        self.number_of_worker_nodes = number_of_worker_nodes
        self.ram = ram
        VapiStruct.__init__(self)


NodeResources._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.node_resources', {
        'cpu': type.OptionalType(type.IntegerType()),
        'disk': type.OptionalType(type.IntegerType()),
        'ephemeral_storage': type.OptionalType(type.IntegerType()),
        'number_of_master_nodes': type.OptionalType(type.IntegerType()),
        'number_of_worker_nodes': type.OptionalType(type.IntegerType()),
        'ram': type.OptionalType(type.IntegerType()),
    },
    NodeResources,
    False,
    None))



class NodeStatus(VapiStruct):
    """
    Runtime status information of the fabric node.

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


    """
    HOST_NODE_DEPLOYMENT_STATUS_INSTALL_IN_PROGRESS = "INSTALL_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_INSTALL_FAILED = "INSTALL_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_INSTALL_SUCCESSFUL = "INSTALL_SUCCESSFUL"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_INSTALL_SKIPPED = "INSTALL_SKIPPED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_IN_PROGRESS = "UNINSTALL_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_FAILED = "UNINSTALL_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_SUCCESSFUL = "UNINSTALL_SUCCESSFUL"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_SCHEDULED = "UNINSTALL_SCHEDULED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_SKIPPED = "UNINSTALL_SKIPPED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UPGRADE_IN_PROGRESS = "UPGRADE_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UPGRADE_FAILED = "UPGRADE_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_PENDING_UPGRADE = "PENDING_UPGRADE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REGISTRATION_PENDING = "REGISTRATION_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_NODE_NOT_READY = "NODE_NOT_READY"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_NODE_READY = "NODE_READY"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_HOST_DISCONNECTED = "HOST_DISCONNECTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_POWERED_OFF = "POWERED_OFF"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    HOST_NODE_DEPLOYMENT_STATUS_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    LCP_CONNECTIVITY_STATUS_UP = "UP"
    """


    """
    LCP_CONNECTIVITY_STATUS_DOWN = "DOWN"
    """


    """
    LCP_CONNECTIVITY_STATUS_DEGRADED = "DEGRADED"
    """


    """
    LCP_CONNECTIVITY_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    MAINTENANCE_MODE_OFF = "OFF"
    """


    """
    MAINTENANCE_MODE_ENTERING = "ENTERING"
    """


    """
    MAINTENANCE_MODE_ON = "ON"
    """


    """
    MAINTENANCE_MODE_EXITING = "EXITING"
    """


    """
    MAINTENANCE_MODE_ENABLED = "ENABLED"
    """


    """
    MAINTENANCE_MODE_DISABLED = "DISABLED"
    """


    """
    MPA_CONNECTIVITY_STATUS_UP = "UP"
    """


    """
    MPA_CONNECTIVITY_STATUS_DOWN = "DOWN"
    """


    """
    MPA_CONNECTIVITY_STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'external_id': 'external_id',
                            'host_node_deployment_status': 'host_node_deployment_status',
                            'inventory_sync_paused': 'inventory_sync_paused',
                            'inventory_sync_reenable_time': 'inventory_sync_reenable_time',
                            'last_heartbeat_timestamp': 'last_heartbeat_timestamp',
                            'last_sync_time': 'last_sync_time',
                            'lcp_connectivity_status': 'lcp_connectivity_status',
                            'lcp_connectivity_status_details': 'lcp_connectivity_status_details',
                            'maintenance_mode': 'maintenance_mode',
                            'mpa_connectivity_status': 'mpa_connectivity_status',
                            'mpa_connectivity_status_details': 'mpa_connectivity_status_details',
                            'software_version': 'software_version',
                            'system_status': 'system_status',
                            }

    def __init__(self,
                 external_id=None,
                 host_node_deployment_status=None,
                 inventory_sync_paused=None,
                 inventory_sync_reenable_time=None,
                 last_heartbeat_timestamp=None,
                 last_sync_time=None,
                 lcp_connectivity_status=None,
                 lcp_connectivity_status_details=None,
                 maintenance_mode=None,
                 mpa_connectivity_status=None,
                 mpa_connectivity_status_details=None,
                 software_version=None,
                 system_status=None,
                ):
        """
        :type  external_id: :class:`str` or ``None``
        :param external_id: HostNode external id
        :type  host_node_deployment_status: :class:`str` or ``None``
        :param host_node_deployment_status: Possible values are: 
            
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_NOT_PREPARED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_INSTALL_IN_PROGRESS`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_INSTALL_FAILED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_INSTALL_SUCCESSFUL`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_INSTALL_SKIPPED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_IN_PROGRESS`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_SUCCESSFUL`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_SCHEDULED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNINSTALL_SKIPPED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UPGRADE_IN_PROGRESS`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UPGRADE_FAILED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_PENDING_UPGRADE`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_NOT_AVAILABLE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_QUEUED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_IN_PROGRESS`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_ON_IN_PROGRESS`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_ON_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REGISTRATION_PENDING`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_NODE_NOT_READY`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_NODE_READY`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_OFF_IN_PROGRESS`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_POWER_OFF_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_UNDEPLOY_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_EDGE_CONFIG_ERROR`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_DEPLOYMENT_RESTARTED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REGISTRATION_FAILED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_HOST_DISCONNECTED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_POWERED_OFF`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_TRANSPORT_NODE_CONFIGURATION_MISSING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_TZ_ENDPOINTS_NOT_SPECIFIED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_NO_PNIC_PREPARED_IN_EDGE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_APPLIANCE_INTERNAL_ERROR`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VTEP_DHCP_NOT_SUPPORTED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_HOSTSWITCH_PROFILE_NOT_FOUND`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_EDGE_NODE_VERSION_NOT_SUPPORTED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_NO_PNIC_SPECIFIED_IN_TN`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_INVALID_PNIC_DEVICE_NAME`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_TRANSPORT_NODE_READY`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_MPA_DISCONNECTED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_NETWORK_EDIT_PENDING`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_RENAME_PENDING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_CONFIG_EDIT_PENDING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_NETWORK_EDIT_FAILED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_RENAME_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_CONFIG_EDIT_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_CONFIG_DISCREPANCY`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_NODE_REFRESH_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_PLACEMENT_REFRESH_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REGISTRATION_TIMEDOUT`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REPLACE_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DELETE_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_RETRYING_REPLACE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DELETE_IN_PROGRESS`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DELETE_FAILED_ON_VM_NOT_FOUND`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DELETE_FAILED_FOR_NON_LCM_EDGE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_SCHEDULED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_SCHEDULED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_IN_PROGRESS`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_IN_PROGRESS`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_SUCCESSFUL`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_SUCCESSFUL`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REDEPLOY_ACTIVITY_FAILED`
            * :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_REDEPLOY_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REDEPLOYED_VM_REGISTRATION_PENDING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REPLACE_ACTIVITY_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_REPLACED_RPC_CLIENT_OF_TN`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_COMPUTE_MANAGER_NOT_FOUND`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DATAPATH_CONFIGURATION_EDIT_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_MAINTENANCE_MODE_ENABLED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_CONFIGURE_UPT_ON_VM_FAILED`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            *
              :attr:`NodeStatus.HOST_NODE_DEPLOYMENT_STATUS_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            
            This enum specifies the current nsx install state for host node or
            current deployment and ready state for edge node. The ready status
            'NODE_READY' indicates whether edge node is ready to become a
            transport node. The status 'EDGE_CONFIG_ERROR' indicates that edge
            hardware or underlying host is not supported. After all fabric
            level operations are done for an edge node, this value indicates
            transport node related configuration issues and state as 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.
        :type  inventory_sync_paused: :class:`bool` or ``None``
        :param inventory_sync_paused: Is true if inventory sync is paused else 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  inventory_sync_reenable_time: :class:`long` or ``None``
        :param inventory_sync_reenable_time: Inventory sync auto re-enable target time, in epoch milis format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_heartbeat_timestamp: :class:`long` or ``None``
        :param last_heartbeat_timestamp: Timestamp of the last heartbeat status change, 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  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of the last successful update of Inventory, 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  lcp_connectivity_status: :class:`str` or ``None``
        :param lcp_connectivity_status: Possible values are: 
            
            * :attr:`NodeStatus.LCP_CONNECTIVITY_STATUS_UP`
            * :attr:`NodeStatus.LCP_CONNECTIVITY_STATUS_DOWN`
            * :attr:`NodeStatus.LCP_CONNECTIVITY_STATUS_DEGRADED`
            * :attr:`NodeStatus.LCP_CONNECTIVITY_STATUS_UNKNOWN`
            
            Indicates the fabric node's LCP<->CCP channel connectivity status,
            UP, DOWN, DEGRADED, UNKNOWN.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lcp_connectivity_status_details: :class:`list` of :class:`ControlConnStatus` or ``None``
        :param lcp_connectivity_status_details: Details, if any, about the current LCP<->CCP channel connectivity
            status of the fabric 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  maintenance_mode: :class:`str` or ``None``
        :param maintenance_mode: Possible values are: 
            
            * :attr:`NodeStatus.MAINTENANCE_MODE_OFF`
            * :attr:`NodeStatus.MAINTENANCE_MODE_ENTERING`
            * :attr:`NodeStatus.MAINTENANCE_MODE_ON`
            * :attr:`NodeStatus.MAINTENANCE_MODE_EXITING`
            * :attr:`NodeStatus.MAINTENANCE_MODE_ENABLED`
            * :attr:`NodeStatus.MAINTENANCE_MODE_DISABLED`
            
            Indicates the fabric node's status of maintenance mode, OFF,
            ENTERING, ON, EXITING, ENABLED, 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  mpa_connectivity_status: :class:`str` or ``None``
        :param mpa_connectivity_status: Possible values are: 
            
            * :attr:`NodeStatus.MPA_CONNECTIVITY_STATUS_UP`
            * :attr:`NodeStatus.MPA_CONNECTIVITY_STATUS_DOWN`
            * :attr:`NodeStatus.MPA_CONNECTIVITY_STATUS_UNKNOWN`
            
            Indicates the fabric node's MP<->MPA channel connectivity status,
            UP, DOWN, UNKNOWN.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mpa_connectivity_status_details: :class:`str` or ``None``
        :param mpa_connectivity_status_details: Details, if any, about the current MP<->MPA channel connectivity
            status of the fabric 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  software_version: :class:`str` or ``None``
        :param software_version: Software version of the fabric 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  system_status: :class:`NodeStatusProperties` or ``None``
        :param system_status: 
        """
        self.external_id = external_id
        self.host_node_deployment_status = host_node_deployment_status
        self.inventory_sync_paused = inventory_sync_paused
        self.inventory_sync_reenable_time = inventory_sync_reenable_time
        self.last_heartbeat_timestamp = last_heartbeat_timestamp
        self.last_sync_time = last_sync_time
        self.lcp_connectivity_status = lcp_connectivity_status
        self.lcp_connectivity_status_details = lcp_connectivity_status_details
        self.maintenance_mode = maintenance_mode
        self.mpa_connectivity_status = mpa_connectivity_status
        self.mpa_connectivity_status_details = mpa_connectivity_status_details
        self.software_version = software_version
        self.system_status = system_status
        VapiStruct.__init__(self)


NodeStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.node_status', {
        'external_id': type.OptionalType(type.StringType()),
        'host_node_deployment_status': type.OptionalType(type.StringType()),
        'inventory_sync_paused': type.OptionalType(type.BooleanType()),
        'inventory_sync_reenable_time': type.OptionalType(type.IntegerType()),
        'last_heartbeat_timestamp': type.OptionalType(type.IntegerType()),
        'last_sync_time': type.OptionalType(type.IntegerType()),
        'lcp_connectivity_status': type.OptionalType(type.StringType()),
        'lcp_connectivity_status_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ControlConnStatus'))),
        'maintenance_mode': type.OptionalType(type.StringType()),
        'mpa_connectivity_status': type.OptionalType(type.StringType()),
        'mpa_connectivity_status_details': type.OptionalType(type.StringType()),
        'software_version': type.OptionalType(type.StringType()),
        'system_status': type.OptionalType(type.ReferenceType(__name__, 'NodeStatusProperties')),
    },
    NodeStatus,
    False,
    None))



class NodeStatusProperties(VapiStruct):
    """
    Node status properties

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


    """
    SOURCE_CACHED = "cached"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cpu_cores': 'cpu_cores',
                            'cpu_sockets': 'cpu_sockets',
                            'cpu_usage': 'cpu_usage',
                            'disk_space_total': 'disk_space_total',
                            'disk_space_used': 'disk_space_used',
                            'dpdk_cpu_cores': 'dpdk_cpu_cores',
                            'dpus': 'dpus',
                            'edge_mem_usage': 'edge_mem_usage',
                            'file_systems': 'file_systems',
                            'hostname': 'hostname',
                            'load_average': 'load_average',
                            'mem_cache': 'mem_cache',
                            'mem_total': 'mem_total',
                            'mem_used': 'mem_used',
                            'non_dpdk_cpu_cores': 'non_dpdk_cpu_cores',
                            'remote_logging_server_configured': 'remote_logging_server_configured',
                            'source': 'source',
                            'swap_total': 'swap_total',
                            'swap_used': 'swap_used',
                            'system_time': 'system_time',
                            'uptime': 'uptime',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cpu_cores=None,
                 cpu_sockets=None,
                 cpu_usage=None,
                 disk_space_total=None,
                 disk_space_used=None,
                 dpdk_cpu_cores=None,
                 dpus=None,
                 edge_mem_usage=None,
                 file_systems=None,
                 hostname=None,
                 load_average=None,
                 mem_cache=None,
                 mem_total=None,
                 mem_used=None,
                 non_dpdk_cpu_cores=None,
                 remote_logging_server_configured=None,
                 source=None,
                 swap_total=None,
                 swap_used=None,
                 system_time=None,
                 uptime=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  cpu_cores: :class:`long` or ``None``
        :param cpu_cores: Number of CPU cores on the system format: int64
            This 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_sockets: :class:`long` or ``None``
        :param cpu_sockets: Number of CPU sockets on the system format: int64
            This 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:`CpuUsage` or ``None``
        :param cpu_usage: 
        :type  disk_space_total: :class:`long` or ``None``
        :param disk_space_total: Amount of disk space available on the system, in kilobytes. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  disk_space_used: :class:`long` or ``None``
        :param disk_space_used: Amount of disk space in use on the system, in kilobytes format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dpdk_cpu_cores: :class:`long` or ``None``
        :param dpdk_cpu_cores: Number of DPDK cores on Edge Node which are used for packet IO
            processing. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dpus: :class:`list` of :class:`DpuStatusProperties` or ``None``
        :param dpus: Data processing units on 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  edge_mem_usage: :class:`EdgeTransportNodeMemoryUsage` or ``None``
        :param edge_mem_usage: 
        :type  file_systems: :class:`list` of :class:`NodeFileSystemProperties` or ``None``
        :param file_systems: File systems configured on 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  hostname: :class:`str` or ``None``
        :param hostname: Host name of 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  load_average: :class:`list` of :class:`float` or ``None``
        :param load_average: One, five, and fifteen minute load averages for 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  mem_cache: :class:`long` or ``None``
        :param mem_cache: Amount of RAM on the system that can be flushed out to disk, in
            kilobytes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mem_total: :class:`long` or ``None``
        :param mem_total: Amount of RAM allocated to the system, in kilobytes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mem_used: :class:`long` or ``None``
        :param mem_used: Amount of RAM in use on the system, in kilobytes format: int64
            This 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_dpdk_cpu_cores: :class:`long` or ``None``
        :param non_dpdk_cpu_cores: Number of non-DPDK cores on 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  remote_logging_server_configured: :class:`bool` or ``None``
        :param remote_logging_server_configured: Indicates if remote logging server is configured.
            This 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:`NodeStatusProperties.SOURCE_REALTIME`
            * :attr:`NodeStatusProperties.SOURCE_CACHED`
            
            Source of status data.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  swap_total: :class:`long` or ``None``
        :param swap_total: Amount of disk available for swap, in kilobytes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  swap_used: :class:`long` or ``None``
        :param swap_used: Amount of swap disk in use, in kilobytes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_time: :class:`long` or ``None``
        :param system_time: Current time expressed in milliseconds since 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  uptime: :class:`long` or ``None``
        :param uptime: Milliseconds since system 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.cpu_cores = cpu_cores
        self.cpu_sockets = cpu_sockets
        self.cpu_usage = cpu_usage
        self.disk_space_total = disk_space_total
        self.disk_space_used = disk_space_used
        self.dpdk_cpu_cores = dpdk_cpu_cores
        self.dpus = dpus
        self.edge_mem_usage = edge_mem_usage
        self.file_systems = file_systems
        self.hostname = hostname
        self.load_average = load_average
        self.mem_cache = mem_cache
        self.mem_total = mem_total
        self.mem_used = mem_used
        self.non_dpdk_cpu_cores = non_dpdk_cpu_cores
        self.remote_logging_server_configured = remote_logging_server_configured
        self.source = source
        self.swap_total = swap_total
        self.swap_used = swap_used
        self.system_time = system_time
        self.uptime = uptime
        VapiStruct.__init__(self)


NodeStatusProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.node_status_properties', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cpu_cores': type.OptionalType(type.IntegerType()),
        'cpu_sockets': type.OptionalType(type.IntegerType()),
        'cpu_usage': type.OptionalType(type.ReferenceType(__name__, 'CpuUsage')),
        'disk_space_total': type.OptionalType(type.IntegerType()),
        'disk_space_used': type.OptionalType(type.IntegerType()),
        'dpdk_cpu_cores': type.OptionalType(type.IntegerType()),
        'dpus': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DpuStatusProperties'))),
        'edge_mem_usage': type.OptionalType(type.ReferenceType(__name__, 'EdgeTransportNodeMemoryUsage')),
        'file_systems': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NodeFileSystemProperties'))),
        'hostname': type.OptionalType(type.StringType()),
        'load_average': type.OptionalType(type.ListType(type.DoubleType())),
        'mem_cache': type.OptionalType(type.IntegerType()),
        'mem_total': type.OptionalType(type.IntegerType()),
        'mem_used': type.OptionalType(type.IntegerType()),
        'non_dpdk_cpu_cores': type.OptionalType(type.IntegerType()),
        'remote_logging_server_configured': type.OptionalType(type.BooleanType()),
        'source': type.OptionalType(type.StringType()),
        'swap_total': type.OptionalType(type.IntegerType()),
        'swap_used': type.OptionalType(type.IntegerType()),
        'system_time': type.OptionalType(type.IntegerType()),
        'uptime': type.OptionalType(type.IntegerType()),
    },
    NodeStatusProperties,
    False,
    None))



class NsxPlusProjectCreationCheckListResult(VapiStruct):
    """
    Paged Collection of NsxPlusProjectCreationCheckResult

    .. 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_: 
        :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:`NsxPlusProjectCreationCheckResult` or ``None``
        :param results: NsxPlusProjectCreationCheckResult 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)


NsxPlusProjectCreationCheckListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsx_plus_project_creation_check_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__, 'NsxPlusProjectCreationCheckResult'))),
    },
    NsxPlusProjectCreationCheckListResult,
    False,
    None))



class NsxPlusProjectCreationCheckResult(VapiStruct):
    """
    Project creation status on NsxPlus

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


    """
    PROJECT_STATUS_PENDING = "PENDING"
    """


    """
    PROJECT_STATUS_FAILURE = "FAILURE"
    """


    """
    PROJECT_STATUS_INPROGRESS = "INPROGRESS"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'error_message': 'error_message',
                            'project_id': 'project_id',
                            'project_short_id': 'project_short_id',
                            'project_status': 'project_status',
                            'site_uuid': 'site_uuid',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 error_message=None,
                 project_id=None,
                 project_short_id=None,
                 project_status=None,
                 site_uuid=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  error_message: :class:`str` or ``None``
        :param error_message: When the project creation FAILED on NsxPlus, this field will
            contain appropriate information or error message.
        :type  project_id: :class:`str` or ``None``
        :param project_id: id of the project to be created on NsxPlus
        :type  project_short_id: :class:`str` or ``None``
        :param project_short_id: short id of the project to be created on NsxPlus
        :type  project_status: :class:`str` or ``None``
        :param project_status: Possible values are: 
            
            * :attr:`NsxPlusProjectCreationCheckResult.PROJECT_STATUS_SUCCESS`
            * :attr:`NsxPlusProjectCreationCheckResult.PROJECT_STATUS_PENDING`
            * :attr:`NsxPlusProjectCreationCheckResult.PROJECT_STATUS_FAILURE`
            *
              :attr:`NsxPlusProjectCreationCheckResult.PROJECT_STATUS_INPROGRESS`
            
            project status Status remains PENDING after the onboarding
            prechecks have passed and before the onboarding is complete. The
            client should continue to intermittently re-read to determine when
            the status is FAILED or SUCCESS.
        :type  site_uuid: :class:`str` or ``None``
        :param site_uuid: siteId of Lm where the project should be spanned
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.error_message = error_message
        self.project_id = project_id
        self.project_short_id = project_short_id
        self.project_status = project_status
        self.site_uuid = site_uuid
        VapiStruct.__init__(self)


NsxPlusProjectCreationCheckResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsx_plus_project_creation_check_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'error_message': type.OptionalType(type.StringType()),
        'project_id': type.OptionalType(type.StringType()),
        'project_short_id': type.OptionalType(type.StringType()),
        'project_status': type.OptionalType(type.StringType()),
        'site_uuid': type.OptionalType(type.StringType()),
    },
    NsxPlusProjectCreationCheckResult,
    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.

            .. deprecated:: unknown
        :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: 
        :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 NvdsUpgradeConfigIssue(VapiStruct):
    """
    Issues reported by upgrade readiness check

    .. 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',
                            'component': 'component',
                            'error': 'error',
                            'objid': 'objid',
                            'recommendation': 'recommendation',
                            'warning': 'warning',
                            }

    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,
                 component=None,
                 error=None,
                 objid=None,
                 recommendation=None,
                 warning=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  component: :class:`str` or ``None``
        :param component: Name of the component/object
            This 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: :class:`str` or ``None``
        :param error: Error for the component describing precheck 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  objid: :class:`str` or ``None``
        :param objid: Id of the object that generated 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  recommendation: :class:`str` or ``None``
        :param recommendation: Recommendation to resolve the error returned for 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  warning: :class:`str` or ``None``
        :param warning: Warning for the component describing precheck 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.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.component = component
        self.error = error
        self.objid = objid
        self.recommendation = recommendation
        self.warning = warning
        VapiStruct.__init__(self)


NvdsUpgradeConfigIssue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nvds_upgrade_config_issue', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'component': type.OptionalType(type.StringType()),
        'error': type.OptionalType(type.StringType()),
        'objid': type.OptionalType(type.StringType()),
        'recommendation': type.OptionalType(type.StringType()),
        'warning': type.OptionalType(type.StringType()),
    },
    NvdsUpgradeConfigIssue,
    False,
    None))



class NvdsUpgradeHostState(VapiStruct):
    """
    Individual host upgrade state

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


    """
    OVERALL_STATE_UPGRADE_PROCESSING = "UPGRADE_PROCESSING"
    """


    """
    OVERALL_STATE_UPGRADE_QUEUED = "UPGRADE_QUEUED"
    """


    """
    OVERALL_STATE_UPGRADE_IN_PROGRESS = "UPGRADE_IN_PROGRESS"
    """


    """
    OVERALL_STATE_UPGRADE_FAILED = "UPGRADE_FAILED"
    """


    """
    OVERALL_STATE_SUCCESS = "SUCCESS"
    """


    """



    _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',
                            'dn_ext_id': 'dn_ext_id',
                            'host': 'host',
                            'ip_address': 'ip_address',
                            'overall_state': 'overall_state',
                            'state_details': 'state_details',
                            'upgrade_stage': 'upgrade_stage',
                            }

    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,
                 dn_ext_id=None,
                 host=None,
                 ip_address=None,
                 overall_state=None,
                 state_details=None,
                 upgrade_stage=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  dn_ext_id: :class:`str` or ``None``
        :param dn_ext_id: DiscoveredNode 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  host: :class:`str` or ``None``
        :param host: TransportNode 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  ip_address: :class:`str` or ``None``
        :param ip_address: TransportNode 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  overall_state: :class:`str` or ``None``
        :param overall_state: Possible values are: 
            
            * :attr:`NvdsUpgradeHostState.OVERALL_STATE_UPGRADE_READY`
            * :attr:`NvdsUpgradeHostState.OVERALL_STATE_UPGRADE_PROCESSING`
            * :attr:`NvdsUpgradeHostState.OVERALL_STATE_UPGRADE_QUEUED`
            * :attr:`NvdsUpgradeHostState.OVERALL_STATE_UPGRADE_IN_PROGRESS`
            * :attr:`NvdsUpgradeHostState.OVERALL_STATE_UPGRADE_FAILED`
            * :attr:`NvdsUpgradeHostState.OVERALL_STATE_SUCCESS`
            
            Overall state of N-VDSes on the TransportNodes
            This 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_details: :class:`list` of :class:`str` or ``None``
        :param state_details: Details of the N-VDS upgrade state on 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  upgrade_stage: :class:`str` or ``None``
        :param upgrade_stage: This field returns current stage of Migration task. Here is a
            sequence of stages the task cycles through,
            TN_MIGRATION_TASK_IN_QUEUE RETRIEVE_SAVED_CONFIG, TN_VALIDATE,
            VMS_RETRIVAL, VMS_UNREGISTRATION, TN_STATELESS_WAIT_FOR_HP,
            DETACH_TNP, TNP_WAIT, TN_SEND_HS_MIGRATION_MSG, TN_ADD_HOST_TO_VDS,
            TN_UPDATE, TN_UPDATE_WAIT, TN_DELETE, TN_DELETE_WAIT,
            FN_DELETE_WAIT, TN_RECONFIG_HOST, TN_CREATE, TN_CREATE_WAIT,
            UPDATE_TNP_AND_APPLY, TN_EXIT_MM, VMS_REGISTRATION,
            VMS_REGISTRATION_WAIT, TN_MIGRATION_COMPLETED Depending on the type
            of host (stateful, stateless, Sddc, etc.) migration task may not
            cycle through all stages but in will follow above sequence. If
            stage is TN_MIGRATION_COMPLETED refer to field overall_state for
            SUCCESS or UPGRADE_FAILURE and state_details for details on same.
            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.dn_ext_id = dn_ext_id
        self.host = host
        self.ip_address = ip_address
        self.overall_state = overall_state
        self.state_details = state_details
        self.upgrade_stage = upgrade_stage
        VapiStruct.__init__(self)


NvdsUpgradeHostState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nvds_upgrade_host_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'))),
        'dn_ext_id': type.OptionalType(type.StringType()),
        'host': type.OptionalType(type.StringType()),
        'ip_address': type.OptionalType(type.StringType()),
        'overall_state': type.OptionalType(type.StringType()),
        'state_details': type.OptionalType(type.ListType(type.StringType())),
        'upgrade_stage': type.OptionalType(type.StringType()),
    },
    NvdsUpgradeHostState,
    False,
    None))



class NvdsUpgradePrecheckId(VapiStruct):
    """
    Nvds upgrade precheck ID

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



    _canonical_to_pep_names = {
                            'precheck_id': 'precheck_id',
                            }

    def __init__(self,
                 precheck_id=None,
                ):
        """
        :type  precheck_id: :class:`str` or ``None``
        :param precheck_id: Tracking ID of nvds upgrade precheck
            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.precheck_id = precheck_id
        VapiStruct.__init__(self)


NvdsUpgradePrecheckId._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nvds_upgrade_precheck_id', {
        'precheck_id': type.OptionalType(type.StringType()),
    },
    NvdsUpgradePrecheckId,
    False,
    None))



class NvdsUpgradeStatusSummary(VapiStruct):
    """
    Overall status of the upgrade readiness check

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


    """
    PRECHECK_STATUS_FAILED = "FAILED"
    """


    """
    PRECHECK_STATUS_PENDING_TOPOLOGY = "PENDING_TOPOLOGY"
    """


    """
    PRECHECK_STATUS_APPLYING_TOPOLOGY = "APPLYING_TOPOLOGY"
    """


    """
    PRECHECK_STATUS_APPLY_TOPOLOGY_FAILED = "APPLY_TOPOLOGY_FAILED"
    """


    """
    PRECHECK_STATUS_READY = "READY"
    """


    """



    _canonical_to_pep_names = {
                            'migration_state': 'migration_state',
                            'precheck_id': 'precheck_id',
                            'precheck_issue': 'precheck_issue',
                            'precheck_status': 'precheck_status',
                            }

    def __init__(self,
                 migration_state=None,
                 precheck_id=None,
                 precheck_issue=None,
                 precheck_status=None,
                ):
        """
        :type  migration_state: :class:`list` of :class:`NvdsUpgradeHostState` or ``None``
        :param migration_state: Overall state of migration across all TransportNodes
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  precheck_id: :class:`str` or ``None``
        :param precheck_id: Tracking ID of nvds upgrade precheck
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  precheck_issue: :class:`list` of :class:`NvdsUpgradeConfigIssue` or ``None``
        :param precheck_issue: Config issue in pre-check
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  precheck_status: :class:`str` or ``None``
        :param precheck_status: Possible values are: 
            
            * :attr:`NvdsUpgradeStatusSummary.PRECHECK_STATUS_IN_PROGRESS`
            * :attr:`NvdsUpgradeStatusSummary.PRECHECK_STATUS_FAILED`
            * :attr:`NvdsUpgradeStatusSummary.PRECHECK_STATUS_PENDING_TOPOLOGY`
            *
              :attr:`NvdsUpgradeStatusSummary.PRECHECK_STATUS_APPLYING_TOPOLOGY`
            *
              :attr:`NvdsUpgradeStatusSummary.PRECHECK_STATUS_APPLY_TOPOLOGY_FAILED`
            * :attr:`NvdsUpgradeStatusSummary.PRECHECK_STATUS_READY`
            
            Overall status of pre-check
            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.migration_state = migration_state
        self.precheck_id = precheck_id
        self.precheck_issue = precheck_issue
        self.precheck_status = precheck_status
        VapiStruct.__init__(self)


NvdsUpgradeStatusSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nvds_upgrade_status_summary', {
        'migration_state': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NvdsUpgradeHostState'))),
        'precheck_id': type.OptionalType(type.StringType()),
        'precheck_issue': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NvdsUpgradeConfigIssue'))),
        'precheck_status': type.OptionalType(type.StringType()),
    },
    NvdsUpgradeStatusSummary,
    False,
    None))



class NvdsUpgradeTopology(VapiStruct):
    """
    NVDS to VDS mappings for migration

    .. 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',
                            'compute_manager_topology': 'compute_manager_topology',
                            'nvds_id': 'nvds_id',
                            'nvds_name': 'nvds_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,
                 compute_manager_topology=None,
                 nvds_id=None,
                 nvds_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  compute_manager_topology: :class:`list` of :class:`ComputeManagerTopology` or ``None``
        :param compute_manager_topology: All resultant VDS mapping for a NVDS after the migration
        :type  nvds_id: :class:`str` or ``None``
        :param nvds_id: Identifier for a NVDS
        :type  nvds_name: :class:`str` or ``None``
        :param nvds_name: Name of a NVDS
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.compute_manager_topology = compute_manager_topology
        self.nvds_id = nvds_id
        self.nvds_name = nvds_name
        VapiStruct.__init__(self)


NvdsUpgradeTopology._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nvds_upgrade_topology', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'compute_manager_topology': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ComputeManagerTopology'))),
        'nvds_id': type.OptionalType(type.StringType()),
        'nvds_name': type.OptionalType(type.StringType()),
    },
    NvdsUpgradeTopology,
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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_: 
        :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 OdsPredefinedRunbook(VapiStruct):
    """
    Policy entity of a system predefined runbook. This is a read-only object
    created by system.

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


    """
    SUPPORTED_NODE_TYPES_NSX_KVM = "NSX_KVM"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_BAREMETAL_SERVER = "NSX_BAREMETAL_SERVER"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_EDGE = "NSX_EDGE"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_PUBLIC_CLOUD_GATEWAY = "NSX_PUBLIC_CLOUD_GATEWAY"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_MANAGER = "NSX_MANAGER"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_POLICY_MANAGER = "NSX_POLICY_MANAGER"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_CONTROLLER = "NSX_CONTROLLER"
    """


    """
    SUPPORTED_NODE_TYPES_GLOBAL_MANAGER = "GLOBAL_MANAGER"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'default_config': 'default_config',
                            'deprecated': 'deprecated',
                            'parameters': 'parameters',
                            'supported_node_types': 'supported_node_types',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 default_config=None,
                 deprecated=None,
                 parameters=None,
                 supported_node_types=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_config: :class:`OdsRunbookSettingData` or ``None``
        :param default_config: 
        :type  deprecated: :class:`bool` or ``None``
        :param deprecated: The flag that indicates whether the runbook 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  parameters: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param parameters: Arguments of runbook.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`OdsRunbookParameter`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`OdsRunbookParameter`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  supported_node_types: :class:`list` of :class:`str` or ``None``
        :param supported_node_types: Possible values are: 
            
            * :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_ESX`
            * :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_KVM`
            *
              :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_BAREMETAL_SERVER`
            * :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_EDGE`
            *
              :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_PUBLIC_CLOUD_GATEWAY`
            * :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_MANAGER`
            *
              :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_POLICY_MANAGER`
            * :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_NSX_CONTROLLER`
            * :attr:`OdsPredefinedRunbook.SUPPORTED_NODE_TYPES_GLOBAL_MANAGER`
            
            Supported node types for the runbook.
            This 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:`OdsRunbookVersion` or ``None``
        :param version: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.default_config = default_config
        self.deprecated = deprecated
        self.parameters = parameters
        self.supported_node_types = supported_node_types
        self.version = version
        VapiStruct.__init__(self)


OdsPredefinedRunbook._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_predefined_runbook', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_config': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookSettingData')),
        'deprecated': type.OptionalType(type.BooleanType()),
        'parameters': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'OdsRunbookParameter')]))),
        'supported_node_types': type.OptionalType(type.ListType(type.StringType())),
        'version': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookVersion')),
    },
    OdsPredefinedRunbook,
    False,
    None))



class OdsPredefinedRunbookListResult(VapiStruct):
    """
    Paged list of Online Diagnostic System predefined runbooks.

    .. 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_: 
        :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:`OdsPredefinedRunbook` or ``None``
        :param results: Online Diagnostic System predefined runbook 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)


OdsPredefinedRunbookListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_predefined_runbook_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__, 'OdsPredefinedRunbook'))),
    },
    OdsPredefinedRunbookListResult,
    False,
    None))



class OdsRunbookArtifactListResult(VapiStruct):
    """
    Collection of Online Diagnostic System artifact 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_: 
        :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:`OdsRunbookArtifactStatus` or ``None``
        :param results: Online Diagnostic System runbook artifact 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)


OdsRunbookArtifactListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_artifact_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__, 'OdsRunbookArtifactStatus'))),
    },
    OdsRunbookArtifactListResult,
    False,
    None))



class OdsRunbookArtifactStatus(VapiStruct):
    """
    The status of Online Diagnostic System artifact object.

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



    _canonical_to_pep_names = {
                            'detail': 'detail',
                            'invocation': 'invocation',
                            }

    def __init__(self,
                 detail=None,
                 invocation=None,
                ):
        """
        :type  detail: :class:`str` or ``None``
        :param detail: Online Diagnostic System runbook invocation detail 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.
        :type  invocation: :class:`str` or ``None``
        :param invocation: Online Diagnostic System runbook invocation 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.detail = detail
        self.invocation = invocation
        VapiStruct.__init__(self)


OdsRunbookArtifactStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_artifact_status', {
        'detail': type.OptionalType(type.StringType()),
        'invocation': type.OptionalType(type.StringType()),
    },
    OdsRunbookArtifactStatus,
    False,
    None))



class OdsRunbookCompoundParameter(VapiStruct):
    """
    Online Diagnostic System runbook parameter of compound type.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "OdsRunbookCompoundParameter"
    """
    Identifier denoting this class, when it is used 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_value': 'default_value',
                            'max': 'max',
                            'min': 'min',
                            'name': 'name',
                            'optional': 'optional',
                            'parameter_type': 'parameter_type',
                            }

    def __init__(self,
                 default_value=None,
                 max=None,
                 min=None,
                 name=None,
                 optional=None,
                 parameter_type='OdsRunbookCompoundParameter',
                ):
        """
        :type  default_value: :class:`str` or ``None``
        :param default_value: Runbook argument will be set to this value if not 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  max: :class:`str` or ``None``
        :param max: Runbook argument is not allowed to set value bigger than this.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  min: :class:`str` or ``None``
        :param min: Runbook argument is not allowed to set value smaller than this.
            This 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: Runbook argument 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  optional: :class:`bool` or ``None``
        :param optional: The flag that indicates whether the argument is optional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  parameter_type: :class:`str`
        :param parameter_type: Possible values are: 
            
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_INTEGER`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_STRING`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_ENUM`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_PATTERN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_COMPOUND`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_BOOLEAN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_FLOAT`
            
            Runbook parameter type. INTEGER - integer STRING - string ENUM -
            enumeration PATTERN - string that matches certain regular
            expression COMPOUND - string that is accepted by the validation of
            runbook BOOLEAN - boolean FLOAT - float
        """
        self.default_value = default_value
        self.max = max
        self.min = min
        self.name = name
        self.optional = optional
        self._parameter_type = parameter_type
        VapiStruct.__init__(self)

    @property
    def parameter_type(self):
        """
        Return the discriminator value
        """
        return self._parameter_type

OdsRunbookCompoundParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_compound_parameter', {
        'default_value': type.OptionalType(type.StringType()),
        'max': type.OptionalType(type.StringType()),
        'min': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'optional': type.OptionalType(type.BooleanType()),
        'parameter_type': type.StringType(),
    },
    OdsRunbookCompoundParameter,
    False,
    None))



class OdsRunbookEnumParameter(VapiStruct):
    """
    Online Diagnostic System runbook parameter of enumeration type.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "OdsRunbookEnumParameter"
    """
    Identifier denoting this class, when it is used 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 = {
                            'members': 'members',
                            'default_value': 'default_value',
                            'max': 'max',
                            'min': 'min',
                            'name': 'name',
                            'optional': 'optional',
                            'parameter_type': 'parameter_type',
                            }

    def __init__(self,
                 members=None,
                 default_value=None,
                 max=None,
                 min=None,
                 name=None,
                 optional=None,
                 parameter_type='OdsRunbookEnumParameter',
                ):
        """
        :type  members: :class:`list` of :class:`str` or ``None``
        :param members: Member of enumeration for runbook parameter.
            This 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_value: :class:`str` or ``None``
        :param default_value: Runbook argument will be set to this value if not 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  max: :class:`str` or ``None``
        :param max: Runbook argument is not allowed to set value bigger than this.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  min: :class:`str` or ``None``
        :param min: Runbook argument is not allowed to set value smaller than this.
            This 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: Runbook argument 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  optional: :class:`bool` or ``None``
        :param optional: The flag that indicates whether the argument is optional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  parameter_type: :class:`str`
        :param parameter_type: Possible values are: 
            
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_INTEGER`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_STRING`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_ENUM`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_PATTERN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_COMPOUND`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_BOOLEAN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_FLOAT`
            
            Runbook parameter type. INTEGER - integer STRING - string ENUM -
            enumeration PATTERN - string that matches certain regular
            expression COMPOUND - string that is accepted by the validation of
            runbook BOOLEAN - boolean FLOAT - float
        """
        self.members = members
        self.default_value = default_value
        self.max = max
        self.min = min
        self.name = name
        self.optional = optional
        self._parameter_type = parameter_type
        VapiStruct.__init__(self)

    @property
    def parameter_type(self):
        """
        Return the discriminator value
        """
        return self._parameter_type

OdsRunbookEnumParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_enum_parameter', {
        'members': type.OptionalType(type.ListType(type.StringType())),
        'default_value': type.OptionalType(type.StringType()),
        'max': type.OptionalType(type.StringType()),
        'min': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'optional': type.OptionalType(type.BooleanType()),
        'parameter_type': type.StringType(),
    },
    OdsRunbookEnumParameter,
    False,
    None))



class OdsRunbookHelpInfo(VapiStruct):
    """
    Help information for an Online Diagnostic System runbook.

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



    _canonical_to_pep_names = {
                            'parameter_info': 'parameter_info',
                            'summary': 'summary',
                            }

    def __init__(self,
                 parameter_info=None,
                 summary=None,
                ):
        """
        :type  parameter_info: :class:`list` of :class:`OdsRunbookParameterHelpInfo` or ``None``
        :param parameter_info: Descriptions on parameters of an Online Diagnostic System runbook.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  summary: :class:`str` or ``None``
        :param summary: Usage summary of an Online Diagnostic System runbook.
            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.parameter_info = parameter_info
        self.summary = summary
        VapiStruct.__init__(self)


OdsRunbookHelpInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_help_info', {
        'parameter_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OdsRunbookParameterHelpInfo'))),
        'summary': type.OptionalType(type.StringType()),
    },
    OdsRunbookHelpInfo,
    False,
    None))



class OdsRunbookIntegerParameter(VapiStruct):
    """
    Online Diagnostic System runbook parameter of integer type.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "OdsRunbookIntegerParameter"
    """
    Identifier denoting this class, when it is used 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_value': 'default_value',
                            'max': 'max',
                            'min': 'min',
                            'name': 'name',
                            'optional': 'optional',
                            'parameter_type': 'parameter_type',
                            }

    def __init__(self,
                 default_value=None,
                 max=None,
                 min=None,
                 name=None,
                 optional=None,
                 parameter_type='OdsRunbookIntegerParameter',
                ):
        """
        :type  default_value: :class:`str` or ``None``
        :param default_value: Runbook argument will be set to this value if not 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  max: :class:`str` or ``None``
        :param max: Runbook argument is not allowed to set value bigger than this.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  min: :class:`str` or ``None``
        :param min: Runbook argument is not allowed to set value smaller than this.
            This 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: Runbook argument 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  optional: :class:`bool` or ``None``
        :param optional: The flag that indicates whether the argument is optional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  parameter_type: :class:`str`
        :param parameter_type: Possible values are: 
            
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_INTEGER`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_STRING`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_ENUM`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_PATTERN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_COMPOUND`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_BOOLEAN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_FLOAT`
            
            Runbook parameter type. INTEGER - integer STRING - string ENUM -
            enumeration PATTERN - string that matches certain regular
            expression COMPOUND - string that is accepted by the validation of
            runbook BOOLEAN - boolean FLOAT - float
        """
        self.default_value = default_value
        self.max = max
        self.min = min
        self.name = name
        self.optional = optional
        self._parameter_type = parameter_type
        VapiStruct.__init__(self)

    @property
    def parameter_type(self):
        """
        Return the discriminator value
        """
        return self._parameter_type

OdsRunbookIntegerParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_integer_parameter', {
        'default_value': type.OptionalType(type.StringType()),
        'max': type.OptionalType(type.StringType()),
        'min': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'optional': type.OptionalType(type.BooleanType()),
        'parameter_type': type.StringType(),
    },
    OdsRunbookIntegerParameter,
    False,
    None))



class OdsRunbookInvocation(VapiStruct):
    """
    Policy entity for the invocation of an Online Diagnostic System runbook.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'arguments': 'arguments',
                            'is_transient': 'is_transient',
                            'runbook_name': 'runbook_name',
                            'runbook_path': 'runbook_path',
                            'target_node': 'target_node',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 arguments=None,
                 is_transient=None,
                 runbook_name=None,
                 runbook_path=None,
                 target_node=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  arguments: :class:`list` of :class:`UnboundedKeyValuePair` or ``None``
        :param arguments: List of key value pairs as the arguments for an execution of an
            Online Diagnostic System runbook.
        :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  runbook_name: :class:`str` or ``None``
        :param runbook_name: The property is read-only, used for querying result.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  runbook_path: :class:`str` or ``None``
        :param runbook_path: The policy path of runbook object.
        :type  target_node: :class:`str` or ``None``
        :param target_node: Identifier of an appliance node or transport node where the
            execution of an Online Diagnostic System runbook happens. If
            unspecified, the runbook execution will happen at a random
            appliance 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.arguments = arguments
        self.is_transient = is_transient
        self.runbook_name = runbook_name
        self.runbook_path = runbook_path
        self.target_node = target_node
        VapiStruct.__init__(self)


OdsRunbookInvocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'arguments': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'UnboundedKeyValuePair'))),
        'is_transient': type.OptionalType(type.BooleanType()),
        'runbook_name': type.OptionalType(type.StringType()),
        'runbook_path': type.OptionalType(type.StringType()),
        'target_node': type.OptionalType(type.StringType()),
    },
    OdsRunbookInvocation,
    False,
    None))



class OdsRunbookInvocationArtifactBatchRequest(VapiStruct):
    """
    Batched request for collecting artifacts of Online Diagnostic System
    invocations.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'invocation_paths': 'invocation_paths',
                            'is_transient': 'is_transient',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 invocation_paths=None,
                 is_transient=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  invocation_paths: :class:`list` of :class:`str` or ``None``
        :param invocation_paths: This array can consist of one or more policy paths. Only policy
            paths of Ods invocations are allowed.
        :type  is_transient: :class:`bool` or ``None``
        :param is_transient: This field indicates whether the intent is transient. If it is set
            to true, intent will be cleaned up after 1 hour of inactivity.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.invocation_paths = invocation_paths
        self.is_transient = is_transient
        VapiStruct.__init__(self)


OdsRunbookInvocationArtifactBatchRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation_artifact_batch_request', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'invocation_paths': type.OptionalType(type.ListType(type.StringType())),
        'is_transient': type.OptionalType(type.BooleanType()),
    },
    OdsRunbookInvocationArtifactBatchRequest,
    False,
    None))



class OdsRunbookInvocationArtifactBatchResult(VapiStruct):
    """
    Result for batched request of Online Diagnostic System runbook artifact
    collection.

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


    """
    STATUS_FINISHED = "FINISHED"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'failed_invocations': 'failed_invocations',
                            'invocation_paths': 'invocation_paths',
                            'is_transient': 'is_transient',
                            'status': 'status',
                            'successful_invocations': 'successful_invocations',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 failed_invocations=None,
                 invocation_paths=None,
                 is_transient=None,
                 status=None,
                 successful_invocations=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  failed_invocations: :class:`OdsRunbookArtifactListResult` or ``None``
        :param failed_invocations: 
        :type  invocation_paths: :class:`list` of :class:`str` or ``None``
        :param invocation_paths: This array can consist of one or more policy paths. Only policy
            paths of Ods invocations are allowed.
        :type  is_transient: :class:`bool` or ``None``
        :param is_transient: This field indicates whether the intent is transient. If it is set
            to true, intent will be cleaned up after 1 hour of inactivity.
            This 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:`OdsRunbookInvocationArtifactBatchResult.STATUS_IN_PROGRESS`
            * :attr:`OdsRunbookInvocationArtifactBatchResult.STATUS_FINISHED`
            
            State of batch process of Online Diagnostic System runbook artifact
            collection. IN-PROGRESS - The batch process is in process. FINISHED
            - The batch process is finished.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  successful_invocations: :class:`OdsRunbookArtifactListResult` or ``None``
        :param successful_invocations: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.failed_invocations = failed_invocations
        self.invocation_paths = invocation_paths
        self.is_transient = is_transient
        self.status = status
        self.successful_invocations = successful_invocations
        VapiStruct.__init__(self)


OdsRunbookInvocationArtifactBatchResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation_artifact_batch_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'failed_invocations': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookArtifactListResult')),
        'invocation_paths': type.OptionalType(type.ListType(type.StringType())),
        'is_transient': type.OptionalType(type.BooleanType()),
        'status': type.OptionalType(type.StringType()),
        'successful_invocations': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookArtifactListResult')),
    },
    OdsRunbookInvocationArtifactBatchResult,
    False,
    None))



class OdsRunbookInvocationArtifactListResult(VapiStruct):
    """
    Paged list of Online Diagnostic System runbook invocation artifacts.

    .. 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_: 
        :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:`OdsRunbookInvocationArtifactBatchResult` or ``None``
        :param results: Online Diagnostic System runbook invocation artifact 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)


OdsRunbookInvocationArtifactListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation_artifact_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__, 'OdsRunbookInvocationArtifactBatchResult'))),
    },
    OdsRunbookInvocationArtifactListResult,
    False,
    None))



class OdsRunbookInvocationListResult(VapiStruct):
    """
    Paged list of Online Diagnostic System runbook invocations.

    .. 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_: 
        :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:`OdsRunbookInvocation` or ``None``
        :param results: Online Diagnostic System runbook invocation 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)


OdsRunbookInvocationListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation_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__, 'OdsRunbookInvocation'))),
    },
    OdsRunbookInvocationListResult,
    False,
    None))



class OdsRunbookInvocationReport(VapiStruct):
    """
    The report of the invocation of an Online Diagnostic System runbook.

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


    """
    INVALID_REASON_CANCELLED = "CANCELLED"
    """


    """
    INVALID_REASON_INTERNAL_ERROR = "INTERNAL_ERROR"
    """


    """



    _canonical_to_pep_names = {
                            'error_detail': 'error_detail',
                            'invalid_reason': 'invalid_reason',
                            'invocation_id': 'invocation_id',
                            'recommendation_code': 'recommendation_code',
                            'recommendation_message': 'recommendation_message',
                            'result_code': 'result_code',
                            'result_message': 'result_message',
                            'status': 'status',
                            'step_details': 'step_details',
                            'sys_info': 'sys_info',
                            'target_node': 'target_node',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 error_detail=None,
                 invalid_reason=None,
                 invocation_id=None,
                 recommendation_code=None,
                 recommendation_message=None,
                 result_code=None,
                 result_message=None,
                 status=None,
                 step_details=None,
                 sys_info=None,
                 target_node=None,
                 timestamp=None,
                ):
        """
        :type  error_detail: :class:`str` or ``None``
        :param error_detail: The error detail of the invalid report.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  invalid_reason: :class:`str` or ``None``
        :param invalid_reason: Possible values are: 
            
            * :attr:`OdsRunbookInvocationReport.INVALID_REASON_TIMEOUT`
            * :attr:`OdsRunbookInvocationReport.INVALID_REASON_CANCELLED`
            * :attr:`OdsRunbookInvocationReport.INVALID_REASON_INTERNAL_ERROR`
            
            The reason why this report is invalid. TIMEOUT - The invocation is
            timeout. CANCELLED - The invocation is cancelled. INTERNAL_ERROR -
            The invocation ends up with 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  invocation_id: :class:`str` or ``None``
        :param invocation_id: The universally unique identifier for invocation of an Online
            Diagnostic System runbook.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  recommendation_code: :class:`long` or ``None``
        :param recommendation_code: Online Diagnostic System recommendation code of the runbook
            invocation. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  recommendation_message: :class:`str` or ``None``
        :param recommendation_message: Online Diagnostic System recommendation message of the runbook
            invocation.
            This 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_code: :class:`long` or ``None``
        :param result_code: Online Diagnostic System result code of the runbook invocation.
            format: int64
            This 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_message: :class:`str` or ``None``
        :param result_message: Online Diagnostic System result message of the runbook invocation.
            This 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:`OdsRunbookInvocationStatus` or ``None``
        :param status: 
        :type  step_details: :class:`list` of :class:`OdsRunbookInvocationStepInfo` or ``None``
        :param step_details: Details of performed steps in the invocation of an Online
            Diagnostic System runbook.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sys_info: :class:`OdsRunbookSysInfo` or ``None``
        :param sys_info: 
        :type  target_node: :class:`str` or ``None``
        :param target_node: Identifier of an appliance node or transport node where the
            execution of an Online Diagnostic System runbook happens.
            This 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: The timestamp when the report of an Online Diagnostic System
            runbook is generated in 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.
        """
        self.error_detail = error_detail
        self.invalid_reason = invalid_reason
        self.invocation_id = invocation_id
        self.recommendation_code = recommendation_code
        self.recommendation_message = recommendation_message
        self.result_code = result_code
        self.result_message = result_message
        self.status = status
        self.step_details = step_details
        self.sys_info = sys_info
        self.target_node = target_node
        self.timestamp = timestamp
        VapiStruct.__init__(self)


OdsRunbookInvocationReport._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation_report', {
        'error_detail': type.OptionalType(type.StringType()),
        'invalid_reason': type.OptionalType(type.StringType()),
        'invocation_id': type.OptionalType(type.StringType()),
        'recommendation_code': type.OptionalType(type.IntegerType()),
        'recommendation_message': type.OptionalType(type.StringType()),
        'result_code': type.OptionalType(type.IntegerType()),
        'result_message': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookInvocationStatus')),
        'step_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OdsRunbookInvocationStepInfo'))),
        'sys_info': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookSysInfo')),
        'target_node': type.OptionalType(type.StringType()),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    OdsRunbookInvocationReport,
    False,
    None))



class OdsRunbookInvocationStatus(VapiStruct):
    """
    The runtime status of the invocation of an Online Diagnostic System
    runbook.

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


    """
    OPERATION_STATE_RUNBOOK_NOT_FOUND = "RUNBOOK_NOT_FOUND"
    """


    """
    OPERATION_STATE_QUEUED = "QUEUED"
    """


    """
    OPERATION_STATE_BUSY_REJECTED = "BUSY_REJECTED"
    """


    """
    OPERATION_STATE_THROTTLED = "THROTTLED"
    """


    """
    OPERATION_STATE_ARG_INVALID = "ARG_INVALID"
    """


    """
    OPERATION_STATE_RUNNING = "RUNNING"
    """


    """
    OPERATION_STATE_FINISHED = "FINISHED"
    """


    """
    OPERATION_STATE_GENERAL_ERROR = "GENERAL_ERROR"
    """


    """
    OPERATION_STATE_RUNBOOK_NOT_ENABLED = "RUNBOOK_NOT_ENABLED"
    """


    """
    OPERATION_STATE_ABORTED = "ABORTED"
    """


    """
    REQUEST_STATUS_SUCCESS = "SUCCESS"
    """


    """
    REQUEST_STATUS_CONNECTION_ERROR = "CONNECTION_ERROR"
    """


    """
    REQUEST_STATUS_TIMEOUT = "TIMEOUT"
    """


    """



    _canonical_to_pep_names = {
                            'operation_state': 'operation_state',
                            'request_status': 'request_status',
                            }

    def __init__(self,
                 operation_state=None,
                 request_status=None,
                ):
        """
        :type  operation_state: :class:`str` or ``None``
        :param operation_state: Possible values are: 
            
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_NONE`
            *
              :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_RUNBOOK_NOT_FOUND`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_QUEUED`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_BUSY_REJECTED`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_THROTTLED`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_ARG_INVALID`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_RUNNING`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_FINISHED`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_GENERAL_ERROR`
            *
              :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_RUNBOOK_NOT_ENABLED`
            * :attr:`OdsRunbookInvocationStatus.OPERATION_STATE_ABORTED`
            
            Operation state of an invocation of an Online Diagnostic System
            runbook on its target node. NONE - No operation state is available.
            RUNBOOK_NOT_FOUND - The specified runbook does not exist on the
            target. QUEUED - The runbook invocation is queued to be scheduled.
            BUSY_REJECTED - The runbook invocation is rejected because the
            runbook runner on the target node is busy. THROTTLED - The runbook
            invocation is rejected by throttling check. ARG_INVALID - The
            runbook invocation is rejected by argument validation. RUNNING -
            The runbook invocation is running. FINISHED - The runbook
            invocation is finished. GENERAL_ERROR - Runbook invocation fails
            with some internal errors. RUNBOOK_NOT_ENABLED - The specified
            runbook is not enabled on the target. ABORTED - The runbook
            invocation is cancelled.
            This 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:`OdsRunbookInvocationStatus.REQUEST_STATUS_SUCCESS`
            *
              :attr:`OdsRunbookInvocationStatus.REQUEST_STATUS_CONNECTION_ERROR`
            * :attr:`OdsRunbookInvocationStatus.REQUEST_STATUS_TIMEOUT`
            
            Request status of an invocation of an Online Diagnostic System
            runbook. SUCCESS - The runbook invocation request is acknowledged
            by the target. CONNECTION_ERROR - The runbook invocation request
            cannot be dispatched to the target because the messaging channel is
            broken. TIMEOUT - The runbook invocation request was acknowledged
            by the target, but it did not report operational state of the
            terminating class to NSX in 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.operation_state = operation_state
        self.request_status = request_status
        VapiStruct.__init__(self)


OdsRunbookInvocationStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation_status', {
        'operation_state': type.OptionalType(type.StringType()),
        'request_status': type.OptionalType(type.StringType()),
    },
    OdsRunbookInvocationStatus,
    False,
    None))



class OdsRunbookInvocationStepInfo(VapiStruct):
    """
    Information on a performed step in the invocation of an Online Diagnostic
    System runbook.

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



    _canonical_to_pep_names = {
                            'action_result': 'action_result',
                            'action_summary': 'action_summary',
                            'artifacts': 'artifacts',
                            'step_id': 'step_id',
                            }

    def __init__(self,
                 action_result=None,
                 action_summary=None,
                 artifacts=None,
                 step_id=None,
                ):
        """
        :type  action_result: :class:`str` or ``None``
        :param action_result: The description of results of performed actions in the step.
            This 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_summary: :class:`str` or ``None``
        :param action_summary: Summary of performed actions in the step.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  artifacts: :class:`list` of :class:`str` or ``None``
        :param artifacts: The collection of associated artifact 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.
        :type  step_id: :class:`long` or ``None``
        :param step_id: The sequence number of a step in the invocation of an Online
            Diagnostic System runbook. 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.action_result = action_result
        self.action_summary = action_summary
        self.artifacts = artifacts
        self.step_id = step_id
        VapiStruct.__init__(self)


OdsRunbookInvocationStepInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_invocation_step_info', {
        'action_result': type.OptionalType(type.StringType()),
        'action_summary': type.OptionalType(type.StringType()),
        'artifacts': type.OptionalType(type.ListType(type.StringType())),
        'step_id': type.OptionalType(type.IntegerType()),
    },
    OdsRunbookInvocationStepInfo,
    False,
    None))



class OdsRunbookParameter(VapiStruct):
    """
    Base type for Online Diagnostic System runbook parameter.

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

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

    """
    PARAMETER_TYPE_INTEGER = "INTEGER"
    """


    """
    PARAMETER_TYPE_STRING = "STRING"
    """


    """
    PARAMETER_TYPE_ENUM = "ENUM"
    """


    """
    PARAMETER_TYPE_PATTERN = "PATTERN"
    """


    """
    PARAMETER_TYPE_COMPOUND = "COMPOUND"
    """


    """
    PARAMETER_TYPE_BOOLEAN = "BOOLEAN"
    """


    """
    PARAMETER_TYPE_FLOAT = "FLOAT"
    """


    """



    _canonical_to_pep_names = {
                            'default_value': 'default_value',
                            'max': 'max',
                            'min': 'min',
                            'name': 'name',
                            'optional': 'optional',
                            'parameter_type': 'parameter_type',
                            }

    def __init__(self,
                 default_value=None,
                 max=None,
                 min=None,
                 name=None,
                 optional=None,
                 parameter_type='OdsRunbookParameter',
                ):
        """
        :type  default_value: :class:`str` or ``None``
        :param default_value: Runbook argument will be set to this value if not 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  max: :class:`str` or ``None``
        :param max: Runbook argument is not allowed to set value bigger than this.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  min: :class:`str` or ``None``
        :param min: Runbook argument is not allowed to set value smaller than this.
            This 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: Runbook argument 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  optional: :class:`bool` or ``None``
        :param optional: The flag that indicates whether the argument is optional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  parameter_type: :class:`str`
        :param parameter_type: Possible values are: 
            
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_INTEGER`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_STRING`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_ENUM`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_PATTERN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_COMPOUND`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_BOOLEAN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_FLOAT`
            
            Runbook parameter type. INTEGER - integer STRING - string ENUM -
            enumeration PATTERN - string that matches certain regular
            expression COMPOUND - string that is accepted by the validation of
            runbook BOOLEAN - boolean FLOAT - float
        """
        self.default_value = default_value
        self.max = max
        self.min = min
        self.name = name
        self.optional = optional
        self._parameter_type = parameter_type
        VapiStruct.__init__(self)

    @property
    def parameter_type(self):
        """
        Return the discriminator value
        """
        return self._parameter_type

OdsRunbookParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_parameter', {
        'default_value': type.OptionalType(type.StringType()),
        'max': type.OptionalType(type.StringType()),
        'min': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'optional': type.OptionalType(type.BooleanType()),
        'parameter_type': type.StringType(),
    },
    OdsRunbookParameter,
    False,
    None))



class OdsRunbookParameterHelpInfo(VapiStruct):
    """
    Help information of Online Diagnostic System runbook parameter.

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



    _canonical_to_pep_names = {
                            'parameter': 'parameter',
                            'summary': 'summary',
                            }

    def __init__(self,
                 parameter=None,
                 summary=None,
                ):
        """
        :type  parameter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param parameter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`OdsRunbookParameter`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`OdsRunbookParameter`.
        :type  summary: :class:`str` or ``None``
        :param summary: Description on semantics and value constraints of an Online
            Diagnostic System runbook parameter.
            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.parameter = parameter
        self.summary = summary
        VapiStruct.__init__(self)


OdsRunbookParameterHelpInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_parameter_help_info', {
        'parameter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'OdsRunbookParameter')])),
        'summary': type.OptionalType(type.StringType()),
    },
    OdsRunbookParameterHelpInfo,
    False,
    None))



class OdsRunbookParameterRange(VapiStruct):
    """
    Online Diagnostic System runbook parameter range

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



    _canonical_to_pep_names = {
                            'max_value': 'max_value',
                            'min_value': 'min_value',
                            }

    def __init__(self,
                 max_value=None,
                 min_value=None,
                ):
        """
        :type  max_value: :class:`long` or ``None``
        :param max_value: The max value of the parameter. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  min_value: :class:`long` or ``None``
        :param min_value: The min value of the parameter. format: int64
            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_value = max_value
        self.min_value = min_value
        VapiStruct.__init__(self)


OdsRunbookParameterRange._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_parameter_range', {
        'max_value': type.OptionalType(type.IntegerType()),
        'min_value': type.OptionalType(type.IntegerType()),
    },
    OdsRunbookParameterRange,
    False,
    None))



class OdsRunbookPatternParameter(VapiStruct):
    """
    Online Diagnostic System runbook parameter of pattern type.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "OdsRunbookPatternParameter"
    """
    Identifier denoting this class, when it is used 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 = {
                            'pattern': 'pattern',
                            'default_value': 'default_value',
                            'max': 'max',
                            'min': 'min',
                            'name': 'name',
                            'optional': 'optional',
                            'parameter_type': 'parameter_type',
                            }

    def __init__(self,
                 pattern=None,
                 default_value=None,
                 max=None,
                 min=None,
                 name=None,
                 optional=None,
                 parameter_type='OdsRunbookPatternParameter',
                ):
        """
        :type  pattern: :class:`str` or ``None``
        :param pattern: Regular expression of pattern for runbook parameter. If the
            parameter does not match this pattern, API call will be rejected.
            This 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_value: :class:`str` or ``None``
        :param default_value: Runbook argument will be set to this value if not 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  max: :class:`str` or ``None``
        :param max: Runbook argument is not allowed to set value bigger than this.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  min: :class:`str` or ``None``
        :param min: Runbook argument is not allowed to set value smaller than this.
            This 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: Runbook argument 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  optional: :class:`bool` or ``None``
        :param optional: The flag that indicates whether the argument is optional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  parameter_type: :class:`str`
        :param parameter_type: Possible values are: 
            
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_INTEGER`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_STRING`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_ENUM`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_PATTERN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_COMPOUND`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_BOOLEAN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_FLOAT`
            
            Runbook parameter type. INTEGER - integer STRING - string ENUM -
            enumeration PATTERN - string that matches certain regular
            expression COMPOUND - string that is accepted by the validation of
            runbook BOOLEAN - boolean FLOAT - float
        """
        self.pattern = pattern
        self.default_value = default_value
        self.max = max
        self.min = min
        self.name = name
        self.optional = optional
        self._parameter_type = parameter_type
        VapiStruct.__init__(self)

    @property
    def parameter_type(self):
        """
        Return the discriminator value
        """
        return self._parameter_type

OdsRunbookPatternParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_pattern_parameter', {
        'pattern': type.OptionalType(type.StringType()),
        'default_value': type.OptionalType(type.StringType()),
        'max': type.OptionalType(type.StringType()),
        'min': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'optional': type.OptionalType(type.BooleanType()),
        'parameter_type': type.StringType(),
    },
    OdsRunbookPatternParameter,
    False,
    None))



class OdsRunbookSetting(VapiStruct):
    """
    Setting for Online Diagnostic System runbook.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'applied_to_all_appliances': 'applied_to_all_appliances',
                            'applied_to_appliance_ids': 'applied_to_appliance_ids',
                            'applied_to_group_path': 'applied_to_group_path',
                            'config': 'config',
                            'runbook_path': 'runbook_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 applied_to_all_appliances=None,
                 applied_to_appliance_ids=None,
                 applied_to_group_path=None,
                 config=None,
                 runbook_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  applied_to_all_appliances: :class:`bool` or ``None``
        :param applied_to_all_appliances: The on-off switch of runbook on all UA appliance nodes. If applied
            to specific UA appliances, please use the applied_to_appliance_ids
            instead. The fields applied_to_all_appliances and
            applied_to_appliance_ids are exclusive to each other.
        :type  applied_to_appliance_ids: :class:`list` of :class:`str` or ``None``
        :param applied_to_appliance_ids: Identifier(s) of UA appliance(s) to which the profile is applied.
            If this field is specified, then it should be a non-empty array.
            The appliance id list can be obtained from API
            api/v1/cluster/nodes. The valid id is the external id of appliance
            with manager role. If applied to all UA appliances, please use the
            applied_to_all_appliance instead.
        :type  applied_to_group_path: :class:`str` or ``None``
        :param applied_to_group_path: The policy path of group to which the profile is applied.
        :type  config: :class:`OdsRunbookSettingData` or ``None``
        :param config: 
        :type  runbook_path: :class:`str` or ``None``
        :param runbook_path: The policy path of runbook 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.applied_to_all_appliances = applied_to_all_appliances
        self.applied_to_appliance_ids = applied_to_appliance_ids
        self.applied_to_group_path = applied_to_group_path
        self.config = config
        self.runbook_path = runbook_path
        VapiStruct.__init__(self)


OdsRunbookSetting._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_setting', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'applied_to_all_appliances': type.OptionalType(type.BooleanType()),
        'applied_to_appliance_ids': type.OptionalType(type.ListType(type.StringType())),
        'applied_to_group_path': type.OptionalType(type.StringType()),
        'config': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookSettingData')),
        'runbook_path': type.OptionalType(type.StringType()),
    },
    OdsRunbookSetting,
    False,
    None))



class OdsRunbookSettingData(VapiStruct):
    """
    Configuration items for an Online Diagnostic System runbook.

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



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'threshold_number': 'threshold_number',
                            'threshold_number_range': 'threshold_number_range',
                            'throttle_cycle': 'throttle_cycle',
                            'throttle_cycle_range': 'throttle_cycle_range',
                            'timeout': 'timeout',
                            'timeout_range': 'timeout_range',
                            }

    def __init__(self,
                 enabled=None,
                 threshold_number=None,
                 threshold_number_range=None,
                 throttle_cycle=None,
                 throttle_cycle_range=None,
                 timeout=None,
                 timeout_range=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The flag that indicates whether the runbook is enabled.
        :type  threshold_number: :class:`long` or ``None``
        :param threshold_number: Maximum number of runbook executions allowed in a throttling cycle.
            Runbook execution will be throttled once the threshold is reached.
            This option does not take effect when the throttling is disabled.
            format: int64
        :type  threshold_number_range: :class:`OdsRunbookParameterRange` or ``None``
        :param threshold_number_range: 
        :type  throttle_cycle: :class:`long` or ``None``
        :param throttle_cycle: Duration of throttling cycle for runbook execution in minutes. It
            controls the minimum time between execution of a runbook and avoids
            executing a runbook too frequently in a short time. If the
            throttling cycle is set to 0, throttling is disabled. format: int64
        :type  throttle_cycle_range: :class:`OdsRunbookParameterRange` or ``None``
        :param throttle_cycle_range: 
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout of runbook execution in seconds. format: int64
        :type  timeout_range: :class:`OdsRunbookParameterRange` or ``None``
        :param timeout_range: 
        """
        self.enabled = enabled
        self.threshold_number = threshold_number
        self.threshold_number_range = threshold_number_range
        self.throttle_cycle = throttle_cycle
        self.throttle_cycle_range = throttle_cycle_range
        self.timeout = timeout
        self.timeout_range = timeout_range
        VapiStruct.__init__(self)


OdsRunbookSettingData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_setting_data', {
        'enabled': type.OptionalType(type.BooleanType()),
        'threshold_number': type.OptionalType(type.IntegerType()),
        'threshold_number_range': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookParameterRange')),
        'throttle_cycle': type.OptionalType(type.IntegerType()),
        'throttle_cycle_range': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookParameterRange')),
        'timeout': type.OptionalType(type.IntegerType()),
        'timeout_range': type.OptionalType(type.ReferenceType(__name__, 'OdsRunbookParameterRange')),
    },
    OdsRunbookSettingData,
    False,
    None))



class OdsRunbookSettingListResult(VapiStruct):
    """
    Paged list of Online Diagnostic System runbook 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',
                            '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_: 
        :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:`OdsRunbookSetting` or ``None``
        :param results: Online Diagnostic System runbook setting 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)


OdsRunbookSettingListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_setting_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__, 'OdsRunbookSetting'))),
    },
    OdsRunbookSettingListResult,
    False,
    None))



class OdsRunbookStringParameter(VapiStruct):
    """
    Online Diagnostic System runbook parameter of string type.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "OdsRunbookStringParameter"
    """
    Identifier denoting this class, when it is used 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_value': 'default_value',
                            'max': 'max',
                            'min': 'min',
                            'name': 'name',
                            'optional': 'optional',
                            'parameter_type': 'parameter_type',
                            }

    def __init__(self,
                 default_value=None,
                 max=None,
                 min=None,
                 name=None,
                 optional=None,
                 parameter_type='OdsRunbookStringParameter',
                ):
        """
        :type  default_value: :class:`str` or ``None``
        :param default_value: Runbook argument will be set to this value if not 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  max: :class:`str` or ``None``
        :param max: Runbook argument is not allowed to set value bigger than this.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  min: :class:`str` or ``None``
        :param min: Runbook argument is not allowed to set value smaller than this.
            This 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: Runbook argument 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  optional: :class:`bool` or ``None``
        :param optional: The flag that indicates whether the argument is optional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  parameter_type: :class:`str`
        :param parameter_type: Possible values are: 
            
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_INTEGER`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_STRING`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_ENUM`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_PATTERN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_COMPOUND`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_BOOLEAN`
            * :attr:`OdsRunbookParameter.PARAMETER_TYPE_FLOAT`
            
            Runbook parameter type. INTEGER - integer STRING - string ENUM -
            enumeration PATTERN - string that matches certain regular
            expression COMPOUND - string that is accepted by the validation of
            runbook BOOLEAN - boolean FLOAT - float
        """
        self.default_value = default_value
        self.max = max
        self.min = min
        self.name = name
        self.optional = optional
        self._parameter_type = parameter_type
        VapiStruct.__init__(self)

    @property
    def parameter_type(self):
        """
        Return the discriminator value
        """
        return self._parameter_type

OdsRunbookStringParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_string_parameter', {
        'default_value': type.OptionalType(type.StringType()),
        'max': type.OptionalType(type.StringType()),
        'min': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'optional': type.OptionalType(type.BooleanType()),
        'parameter_type': type.StringType(),
    },
    OdsRunbookStringParameter,
    False,
    None))



class OdsRunbookSysInfo(VapiStruct):
    """
    System information of the node where an Online Diagnostic System runbook is
    executed.

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



    _canonical_to_pep_names = {
                            'host_name': 'host_name',
                            'os_name': 'os_name',
                            'os_version': 'os_version',
                            }

    def __init__(self,
                 host_name=None,
                 os_name=None,
                 os_version=None,
                ):
        """
        :type  host_name: :class:`str` or ``None``
        :param host_name: Host name or 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  os_name: :class:`str` or ``None``
        :param os_name: Operating system 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  os_version: :class:`str` or ``None``
        :param os_version: Operating system 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.host_name = host_name
        self.os_name = os_name
        self.os_version = os_version
        VapiStruct.__init__(self)


OdsRunbookSysInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_sys_info', {
        'host_name': type.OptionalType(type.StringType()),
        'os_name': type.OptionalType(type.StringType()),
        'os_version': type.OptionalType(type.StringType()),
    },
    OdsRunbookSysInfo,
    False,
    None))



class OdsRunbookVersion(VapiStruct):
    """
    Version of Online Diagnostic System runbook.

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



    _canonical_to_pep_names = {
                            'major': 'major',
                            'minor': 'minor',
                            }

    def __init__(self,
                 major=None,
                 minor=None,
                ):
        """
        :type  major: :class:`long` or ``None``
        :param major: Major revision of runbook. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  minor: :class:`long` or ``None``
        :param minor: Minor revision of runbook. format: int64
            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.major = major
        self.minor = minor
        VapiStruct.__init__(self)


OdsRunbookVersion._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ods_runbook_version', {
        'major': type.OptionalType(type.IntegerType()),
        'minor': type.OptionalType(type.IntegerType()),
    },
    OdsRunbookVersion,
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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 OperationVerticalConfig(VapiStruct):
    """
    The details of deactivated operation verticals

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



    _canonical_to_pep_names = {
                            'latency_stat_disabled': 'latency_stat_disabled',
                            'live_trace_disabled': 'live_trace_disabled',
                            }

    def __init__(self,
                 latency_stat_disabled=None,
                 live_trace_disabled=None,
                ):
        """
        :type  latency_stat_disabled: :class:`bool` or ``None``
        :param latency_stat_disabled: When this flag is set to true, the latency stat feature is
            deactivated. It is due to the SmartNIC backed DVS existing in
            Policy Manager. The latency has special GENEVE option to carry
            Latency information. But the hardware doesn't support 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  live_trace_disabled: :class:`bool` or ``None``
        :param live_trace_disabled: When this flag is set to true, the live trace feature is
            deactivated. It is due to the SmartNIC backed DVS existing in
            Policy Manager. The live trace has a special Geneve option in the
            header. But the hardware doesn't support 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.
        """
        self.latency_stat_disabled = latency_stat_disabled
        self.live_trace_disabled = live_trace_disabled
        VapiStruct.__init__(self)


OperationVerticalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.operation_vertical_config', {
        'latency_stat_disabled': type.OptionalType(type.BooleanType()),
        'live_trace_disabled': type.OptionalType(type.BooleanType()),
    },
    OperationVerticalConfig,
    False,
    None))



class OpsGlobalConfig(VapiStruct):
    """
    Global Operations 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'in_band_network_telementry': 'in_band_network_telementry',
                            'is_inherited': 'is_inherited',
                            'operation_collectors': 'operation_collectors',
                            'operation_feature_disabled': 'operation_feature_disabled',
                            'site_infos': 'site_infos',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 in_band_network_telementry=None,
                 is_inherited=None,
                 operation_collectors=None,
                 operation_feature_disabled=None,
                 site_infos=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  in_band_network_telementry: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param in_band_network_telementry: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`DscpIndicator`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`DscpIndicator`.
        :type  is_inherited: :class:`bool` or ``None``
        :param is_inherited: if True, meaning that this is a copy version of GM if False,
            meaning that this is a local version on LM
        :type  operation_collectors: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param operation_collectors: The operation collector is defined to receive stats from hosts. The
            VRNI and WAVE_FRONT collector type can be defined to collect the
            metric data. The WAVE_FRONT collector type can only be used in VMC
            mode.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`GlobalCollectorConfig`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`GlobalCollectorConfig`.
        :type  operation_feature_disabled: :class:`OperationVerticalConfig` or ``None``
        :param operation_feature_disabled: 
        :type  site_infos: :class:`list` of :class:`SiteInfo` or ``None``
        :param site_infos: Information related to sites applicable for given 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.in_band_network_telementry = in_band_network_telementry
        self.is_inherited = is_inherited
        self.operation_collectors = operation_collectors
        self.operation_feature_disabled = operation_feature_disabled
        self.site_infos = site_infos
        VapiStruct.__init__(self)


OpsGlobalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ops_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'in_band_network_telementry': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'DscpIndicator')])),
        'is_inherited': type.OptionalType(type.BooleanType()),
        'operation_collectors': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'GlobalCollectorConfig')]))),
        'operation_feature_disabled': type.OptionalType(type.ReferenceType(__name__, 'OperationVerticalConfig')),
        'site_infos': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteInfo'))),
    },
    OpsGlobalConfig,
    False,
    None))



class Org(VapiStruct):
    """
    Org is created by infra provider.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'short_id': 'short_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 short_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  short_id: :class:`str` or ``None``
        :param short_id: Defaults to id if id is less than equal to 8 characters or defaults
            to random generated id if not set.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.short_id = short_id
        VapiStruct.__init__(self)


Org._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.org', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'short_id': type.OptionalType(type.StringType()),
    },
    Org,
    False,
    None))



class OrgListResult(VapiStruct):
    """
    Paged Collection of Org

    .. 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_: 
        :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:`Org` or ``None``
        :param results: Org 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)


OrgListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.org_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__, 'Org'))),
    },
    OrgListResult,
    False,
    None))



class OrgRoot(VapiStruct):
    """
    OrgRoot space related policy multi tenancy.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`OrgRoot.CONNECTIVITY_STRATEGY_WHITELIST`
            * :attr:`OrgRoot.CONNECTIVITY_STRATEGY_BLACKLIST`
            * :attr:`OrgRoot.CONNECTIVITY_STRATEGY_WHITELIST_ENABLE_LOGGING`
            * :attr:`OrgRoot.CONNECTIVITY_STRATEGY_BLACKLIST_ENABLE_LOGGING`
            * :attr:`OrgRoot.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 - Whitelisting with logging enabled
            BLACKLIST_ENABLE_LOGGING - Blacklisting with logging enabled NONE -
            No default rules are added.

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


OrgRoot._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.org_root', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    OrgRoot,
    False,
    None))



class OspfAreaConfig(VapiStruct):
    """
    Contains OSPF Area configuration.

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


    """
    AREA_TYPE_NSSA = "NSSA"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'area_id': 'area_id',
                            'area_type': 'area_type',
                            'authentication': 'authentication',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 area_id=None,
                 area_type=None,
                 authentication=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  area_id: :class:`str` or ``None``
        :param area_id: OSPF area-id either in decimal or dotted format.
        :type  area_type: :class:`str` or ``None``
        :param area_type: Possible values are: 
            
            * :attr:`OspfAreaConfig.AREA_TYPE_NORMAL`
            * :attr:`OspfAreaConfig.AREA_TYPE_NSSA`
            
            Configures OSPF area with defined area type. If area_type field not
            specified, default is NSSA.
        :type  authentication: :class:`OspfAuthenticationConfig` or ``None``
        :param authentication: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.area_id = area_id
        self.area_type = area_type
        self.authentication = authentication
        VapiStruct.__init__(self)


OspfAreaConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_area_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'area_id': type.OptionalType(type.StringType()),
        'area_type': type.OptionalType(type.StringType()),
        'authentication': type.OptionalType(type.ReferenceType(__name__, 'OspfAuthenticationConfig')),
    },
    OspfAreaConfig,
    False,
    None))



class OspfAreaConfigListResult(VapiStruct):
    """
    Collection of OSPF area 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_: 
        :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:`OspfAreaConfig` or ``None``
        :param results: OSPF area 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)


OspfAreaConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_area_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__, 'OspfAreaConfig'))),
    },
    OspfAreaConfigListResult,
    False,
    None))



class OspfAuthenticationConfig(VapiStruct):
    """
    Enables OSPF authentication with specified mode and password.

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


    """
    MODE_PASSWORD = "PASSWORD"
    """


    """
    MODE_MD5 = "MD5"
    """


    """



    _canonical_to_pep_names = {
                            'key_id': 'key_id',
                            'mode': 'mode',
                            'secret_key': 'secret_key',
                            }

    def __init__(self,
                 key_id=None,
                 mode=None,
                 secret_key=None,
                ):
        """
        :type  key_id: :class:`long` or ``None``
        :param key_id: Authentication secret key id is mandatory for type md5 with min
            value of 1 and max value 255. format: int64
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`OspfAuthenticationConfig.MODE_NONE`
            * :attr:`OspfAuthenticationConfig.MODE_PASSWORD`
            * :attr:`OspfAuthenticationConfig.MODE_MD5`
            
            If mode is MD5 or PASSWORD, Authentication secret key is mandatory
            if mode is NONE, then authentication is deactivated.
        :type  secret_key: :class:`str` or ``None``
        :param secret_key: Authentication secret is mandatory for type password and md5 with
            min length of 1 and max length 8.
        """
        self.key_id = key_id
        self.mode = mode
        self.secret_key = secret_key
        VapiStruct.__init__(self)


OspfAuthenticationConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_authentication_config', {
        'key_id': type.OptionalType(type.IntegerType()),
        'mode': type.OptionalType(type.StringType()),
        'secret_key': type.OptionalType(type.StringType()),
    },
    OspfAuthenticationConfig,
    False,
    None))



class OspfDabtabaseCsvRecord(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:`str` or ``None``
        :param results: 
        """
        self.results = results
        VapiStruct.__init__(self)


OspfDabtabaseCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_dabtabase_csv_record', {
        'results': type.OptionalType(type.StringType()),
    },
    OspfDabtabaseCsvRecord,
    False,
    None))



class OspfDatabaseListResultInCsvFormat(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:`OspfDabtabaseCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


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



class OspfDatabaseStatus(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'area_id': 'area_id',
                            'asbr_summary_link_states': 'asbr_summary_link_states',
                            'edge_path': 'edge_path',
                            'external_link_states': 'external_link_states',
                            'net_link_states': 'net_link_states',
                            'nssa_external_link_states': 'nssa_external_link_states',
                            'router_link_states': 'router_link_states',
                            'summary_link_states': 'summary_link_states',
                            }

    def __init__(self,
                 area_id=None,
                 asbr_summary_link_states=None,
                 edge_path=None,
                 external_link_states=None,
                 net_link_states=None,
                 nssa_external_link_states=None,
                 router_link_states=None,
                 summary_link_states=None,
                ):
        """
        :type  area_id: :class:`str` or ``None``
        :param area_id: OSPF area id to filter the the OSPF database.
        :type  asbr_summary_link_states: :class:`list` of :class:`MpOspfSummaryLinkStates` or ``None``
        :param asbr_summary_link_states: array of ASBR summary link state of OSPF database
            This 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 to 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  external_link_states: :class:`list` of :class:`MpOspfExternalLinkState` or ``None``
        :param external_link_states: array of external link of OSPF database
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  net_link_states: :class:`list` of :class:`MpOspfNetworkLinkStates` or ``None``
        :param net_link_states: array of network link state of OSPF database
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nssa_external_link_states: :class:`list` of :class:`MpOspfExternalLinkState` or ``None``
        :param nssa_external_link_states: array of nssa external link of OSPF database
            This 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_link_states: :class:`list` of :class:`MpOspfRouterLinkStates` or ``None``
        :param router_link_states: array of link state of OSPF database
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  summary_link_states: :class:`list` of :class:`MpOspfSummaryLinkStates` or ``None``
        :param summary_link_states: array of summary link state of OSPF database
            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.area_id = area_id
        self.asbr_summary_link_states = asbr_summary_link_states
        self.edge_path = edge_path
        self.external_link_states = external_link_states
        self.net_link_states = net_link_states
        self.nssa_external_link_states = nssa_external_link_states
        self.router_link_states = router_link_states
        self.summary_link_states = summary_link_states
        VapiStruct.__init__(self)


OspfDatabaseStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_database_status', {
        'area_id': type.OptionalType(type.StringType()),
        'asbr_summary_link_states': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MpOspfSummaryLinkStates'))),
        'edge_path': type.OptionalType(type.StringType()),
        'external_link_states': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MpOspfExternalLinkState'))),
        'net_link_states': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MpOspfNetworkLinkStates'))),
        'nssa_external_link_states': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MpOspfExternalLinkState'))),
        'router_link_states': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MpOspfRouterLinkStates'))),
        'summary_link_states': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MpOspfSummaryLinkStates'))),
    },
    OspfDatabaseStatus,
    False,
    None))



class OspfNeighbor(VapiStruct):
    """
    OSPF Neighbor Per Edge.

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



    _canonical_to_pep_names = {
                            'edge_display_name': 'edge_display_name',
                            'edge_path': 'edge_path',
                            'neighbors': 'neighbors',
                            }

    def __init__(self,
                 edge_display_name=None,
                 edge_path=None,
                 neighbors=None,
                ):
        """
        :type  edge_display_name: :class:`str` or ``None``
        :param edge_display_name: Display name to edge node.
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path to edge node.
        :type  neighbors: :class:`list` of :class:`OspfNeighborStatus` or ``None``
        :param neighbors: 
        """
        self.edge_display_name = edge_display_name
        self.edge_path = edge_path
        self.neighbors = neighbors
        VapiStruct.__init__(self)


OspfNeighbor._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_neighbor', {
        'edge_display_name': type.OptionalType(type.StringType()),
        'edge_path': type.OptionalType(type.StringType()),
        'neighbors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfNeighborStatus'))),
    },
    OspfNeighbor,
    False,
    None))



class OspfNeighborStatus(VapiStruct):
    """
    OSPF Neighbor Status.

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



    _canonical_to_pep_names = {
                            'neighbor_address': 'neighbor_address',
                            'neighbor_status_info': 'neighbor_status_info',
                            }

    def __init__(self,
                 neighbor_address=None,
                 neighbor_status_info=None,
                ):
        """
        :type  neighbor_address: :class:`str` or ``None``
        :param neighbor_address: OSPF neighbor 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_status_info: :class:`list` of :class:`OspfStatusInfo` or ``None``
        :param neighbor_status_info: 
        """
        self.neighbor_address = neighbor_address
        self.neighbor_status_info = neighbor_status_info
        VapiStruct.__init__(self)


OspfNeighborStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_neighbor_status', {
        'neighbor_address': type.OptionalType(type.StringType()),
        'neighbor_status_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfStatusInfo'))),
    },
    OspfNeighborStatus,
    False,
    None))



class OspfNeighborsStatusListResult(VapiStruct):
    """
    OSPF Neighbors.

    .. 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',
                            'gateway_path': 'gateway_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,
                 gateway_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_: 
        :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  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 gateway.
        :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:`OspfNeighbor` 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.gateway_path = gateway_path
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


OspfNeighborsStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_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()),
        'gateway_path': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfNeighbor'))),
    },
    OspfNeighborsStatusListResult,
    False,
    None))



class OspfRoute(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'area': 'area',
                            'cost': 'cost',
                            'next_hops': 'next_hops',
                            'route_prefix': 'route_prefix',
                            'route_type': 'route_type',
                            'router_type': 'router_type',
                            'type_to_cost': 'type_to_cost',
                            }

    def __init__(self,
                 area=None,
                 cost=None,
                 next_hops=None,
                 route_prefix=None,
                 route_type=None,
                 router_type=None,
                 type_to_cost=None,
                ):
        """
        :type  area: :class:`str` or ``None``
        :param area: OSPF area.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cost: :class:`long` or ``None``
        :param cost: Cost of the route. format: int64
            This 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_hops: :class:`list` of :class:`OspfRouteNextHopResult` or ``None``
        :param next_hops: request counter.
            This 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_prefix: :class:`str` or ``None``
        :param route_prefix: Learned route prefix.
            This 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: Type of route.
            This 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_type: :class:`str` or ``None``
        :param router_type: Type of 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  type_to_cost: :class:`long` or ``None``
        :param type_to_cost: Type to cost of the route. format: int64
            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.area = area
        self.cost = cost
        self.next_hops = next_hops
        self.route_prefix = route_prefix
        self.route_type = route_type
        self.router_type = router_type
        self.type_to_cost = type_to_cost
        VapiStruct.__init__(self)


OspfRoute._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_route', {
        'area': type.OptionalType(type.StringType()),
        'cost': type.OptionalType(type.IntegerType()),
        'next_hops': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfRouteNextHopResult'))),
        'route_prefix': type.OptionalType(type.StringType()),
        'route_type': type.OptionalType(type.StringType()),
        'router_type': type.OptionalType(type.StringType()),
        'type_to_cost': type.OptionalType(type.IntegerType()),
    },
    OspfRoute,
    False,
    None))



class OspfRouteDetailsInCsvRecord(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'area': 'area',
                            'cost': 'cost',
                            'edge_path': 'edge_path',
                            'next_hop_directly_attached': 'next_hop_directly_attached',
                            'next_hop_interface_name': 'next_hop_interface_name',
                            'next_hop_neighbor_address': 'next_hop_neighbor_address',
                            'route_prefix': 'route_prefix',
                            'route_type': 'route_type',
                            'router_type': 'router_type',
                            'type_to_cost': 'type_to_cost',
                            }

    def __init__(self,
                 area=None,
                 cost=None,
                 edge_path=None,
                 next_hop_directly_attached=None,
                 next_hop_interface_name=None,
                 next_hop_neighbor_address=None,
                 route_prefix=None,
                 route_type=None,
                 router_type=None,
                 type_to_cost=None,
                ):
        """
        :type  area: :class:`str` or ``None``
        :param area: OSPF area.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cost: :class:`long` or ``None``
        :param cost: Cost of the route. format: int64
            This 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 edge 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  next_hop_directly_attached: :class:`bool` or ``None``
        :param next_hop_directly_attached: Check whether OSPF route is directly connected.
            This 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_interface_name: :class:`str` or ``None``
        :param next_hop_interface_name: OSPF policy interface 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  next_hop_neighbor_address: :class:`str` or ``None``
        :param next_hop_neighbor_address: route next hop result. 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_prefix: :class:`str` or ``None``
        :param route_prefix: Learned route prefix.
            This 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: Type of route.
            This 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_type: :class:`str` or ``None``
        :param router_type: Type of 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  type_to_cost: :class:`long` or ``None``
        :param type_to_cost: Type to cost of the route. format: int64
            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.area = area
        self.cost = cost
        self.edge_path = edge_path
        self.next_hop_directly_attached = next_hop_directly_attached
        self.next_hop_interface_name = next_hop_interface_name
        self.next_hop_neighbor_address = next_hop_neighbor_address
        self.route_prefix = route_prefix
        self.route_type = route_type
        self.router_type = router_type
        self.type_to_cost = type_to_cost
        VapiStruct.__init__(self)


OspfRouteDetailsInCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_route_details_in_csv_record', {
        'area': type.OptionalType(type.StringType()),
        'cost': type.OptionalType(type.IntegerType()),
        'edge_path': type.OptionalType(type.StringType()),
        'next_hop_directly_attached': type.OptionalType(type.BooleanType()),
        'next_hop_interface_name': type.OptionalType(type.StringType()),
        'next_hop_neighbor_address': type.OptionalType(type.StringType()),
        'route_prefix': type.OptionalType(type.StringType()),
        'route_type': type.OptionalType(type.StringType()),
        'router_type': type.OptionalType(type.StringType()),
        'type_to_cost': type.OptionalType(type.IntegerType()),
    },
    OspfRouteDetailsInCsvRecord,
    False,
    None))



class OspfRouteNextHopResult(VapiStruct):
    """
    OSPF route next hop result.

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



    _canonical_to_pep_names = {
                            'directly_attached': 'directly_attached',
                            'interface_name': 'interface_name',
                            'neighbor_address': 'neighbor_address',
                            }

    def __init__(self,
                 directly_attached=None,
                 interface_name=None,
                 neighbor_address=None,
                ):
        """
        :type  directly_attached: :class:`bool` or ``None``
        :param directly_attached: Check whether OSPF route is directly connected.
            This 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_name: :class:`str` or ``None``
        :param interface_name: OSPF policy interface 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  neighbor_address: :class:`str` or ``None``
        :param neighbor_address: 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.
        """
        self.directly_attached = directly_attached
        self.interface_name = interface_name
        self.neighbor_address = neighbor_address
        VapiStruct.__init__(self)


OspfRouteNextHopResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_route_next_hop_result', {
        'directly_attached': type.OptionalType(type.BooleanType()),
        'interface_name': type.OptionalType(type.StringType()),
        'neighbor_address': type.OptionalType(type.StringType()),
    },
    OspfRouteNextHopResult,
    False,
    None))



class OspfRoutes(VapiStruct):
    """
    OSPF Routes Per Edge.

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



    _canonical_to_pep_names = {
                            'edge_display_name': 'edge_display_name',
                            'edge_path': 'edge_path',
                            'route_details': 'route_details',
                            }

    def __init__(self,
                 edge_display_name=None,
                 edge_path=None,
                 route_details=None,
                ):
        """
        :type  edge_display_name: :class:`str` or ``None``
        :param edge_display_name: Display name to edge node.
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path to edge node.
        :type  route_details: :class:`list` of :class:`OspfRoute` or ``None``
        :param route_details: 
        """
        self.edge_display_name = edge_display_name
        self.edge_path = edge_path
        self.route_details = route_details
        VapiStruct.__init__(self)


OspfRoutes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_routes', {
        'edge_display_name': type.OptionalType(type.StringType()),
        'edge_path': type.OptionalType(type.StringType()),
        'route_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfRoute'))),
    },
    OspfRoutes,
    False,
    None))



class OspfRoutesListResult(VapiStruct):
    """
    OSPF 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',
                            'gateway_path': 'gateway_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,
                 gateway_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_: 
        :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  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 gateway.
        :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:`OspfRoutes` 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.gateway_path = gateway_path
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


OspfRoutesListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_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()),
        'gateway_path': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfRoutes'))),
    },
    OspfRoutesListResult,
    False,
    None))



class OspfRoutesListResultInCsvFormat(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:`OspfRouteDetailsInCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


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



class OspfRoutingConfig(VapiStruct):
    """
    Contains OSPF routing configurations.

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


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'default_originate': 'default_originate',
                            'ecmp': 'ecmp',
                            'enabled': 'enabled',
                            'graceful_restart_mode': 'graceful_restart_mode',
                            'summary_addresses': 'summary_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 default_originate=None,
                 ecmp=None,
                 enabled=None,
                 graceful_restart_mode=None,
                 summary_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_originate: :class:`bool` or ``None``
        :param default_originate: Flag to activate/deactivate advertisement of default route into
            OSPF domain. The default route should be present in the edge only
            then it redistributes the same into OSPF domain only if this flag
            is set to TRUE.
        :type  ecmp: :class:`bool` or ``None``
        :param ecmp: Flag to enable ECMP.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable OSPF routing protocol. Disabling will stop feature
            and OSPF peering.
        :type  graceful_restart_mode: :class:`str` or ``None``
        :param graceful_restart_mode: Possible values are: 
            
            * :attr:`OspfRoutingConfig.GRACEFUL_RESTART_MODE_DISABLE`
            * :attr:`OspfRoutingConfig.GRACEFUL_RESTART_MODE_HELPER_ONLY`
            
            Configuration field to hold OSPF Restart mode .
        :type  summary_addresses: :class:`list` of :class:`OspfSummaryAddressConfig` or ``None``
        :param summary_addresses: List of summary address configruation to summarize or filter
            external routes based on the setting of advertise flag in each
            OspfSummaryAddressConfig
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.default_originate = default_originate
        self.ecmp = ecmp
        self.enabled = enabled
        self.graceful_restart_mode = graceful_restart_mode
        self.summary_addresses = summary_addresses
        VapiStruct.__init__(self)


OspfRoutingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_originate': type.OptionalType(type.BooleanType()),
        'ecmp': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'graceful_restart_mode': type.OptionalType(type.StringType()),
        'summary_addresses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfSummaryAddressConfig'))),
    },
    OspfRoutingConfig,
    False,
    None))



class OspfStatusInfo(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'database_summary_counter': 'database_summary_counter',
                            'dead_time': 'dead_time',
                            'interface_name': 'interface_name',
                            'last_state_change': 'last_state_change',
                            'priority': 'priority',
                            'request_counter': 'request_counter',
                            'retransmit_counter': 'retransmit_counter',
                            'source_address': 'source_address',
                            'state': 'state',
                            }

    def __init__(self,
                 database_summary_counter=None,
                 dead_time=None,
                 interface_name=None,
                 last_state_change=None,
                 priority=None,
                 request_counter=None,
                 retransmit_counter=None,
                 source_address=None,
                 state=None,
                ):
        """
        :type  database_summary_counter: :class:`long` or ``None``
        :param database_summary_counter: Database summary counter. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dead_time: :class:`str` or ``None``
        :param dead_time: Time remaining in before considering OSPF neighbor dead.
            This 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_name: :class:`str` or ``None``
        :param interface_name: Tier0 interface 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  last_state_change: :class:`str` or ``None``
        :param last_state_change: Time since last change in 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  priority: :class:`long` or ``None``
        :param priority: Priority of 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  request_counter: :class:`long` or ``None``
        :param request_counter: request counter. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  retransmit_counter: :class:`long` or ``None``
        :param retransmit_counter: Retransmit request counter. format: int64
            This 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  state: :class:`str` or ``None``
        :param state: OSPF neighbor 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.
        """
        self.database_summary_counter = database_summary_counter
        self.dead_time = dead_time
        self.interface_name = interface_name
        self.last_state_change = last_state_change
        self.priority = priority
        self.request_counter = request_counter
        self.retransmit_counter = retransmit_counter
        self.source_address = source_address
        self.state = state
        VapiStruct.__init__(self)


OspfStatusInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_status_info', {
        'database_summary_counter': type.OptionalType(type.IntegerType()),
        'dead_time': type.OptionalType(type.StringType()),
        'interface_name': type.OptionalType(type.StringType()),
        'last_state_change': type.OptionalType(type.StringType()),
        'priority': type.OptionalType(type.IntegerType()),
        'request_counter': type.OptionalType(type.IntegerType()),
        'retransmit_counter': type.OptionalType(type.IntegerType()),
        'source_address': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    OspfStatusInfo,
    False,
    None))



class OspfSummaryAddressConfig(VapiStruct):
    """
    OSPF summary address configuration to summarize external routes

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



    _canonical_to_pep_names = {
                            'advertise': 'advertise',
                            'prefix': 'prefix',
                            }

    def __init__(self,
                 advertise=None,
                 prefix=None,
                ):
        """
        :type  advertise: :class:`bool` or ``None``
        :param advertise: Used to filter the advertisement of external routes into the OSPF
            domain. Setting this field to \"TRUE\" will enable the
            summarization of external routes that are covered by ip_prefix
            configuration. Setting this field to \"FALSE\" will filter the
            advertisement of external routes that are covered by ip_prefix
            configuration.
        :type  prefix: :class:`str` or ``None``
        :param prefix: OSPF Summary address in CIDR format format: ip-cidr-block
        """
        self.advertise = advertise
        self.prefix = prefix
        VapiStruct.__init__(self)


OspfSummaryAddressConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ospf_summary_address_config', {
        'advertise': type.OptionalType(type.BooleanType()),
        'prefix': type.OptionalType(type.StringType()),
    },
    OspfSummaryAddressConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 OverrideListRequestParameters(VapiStruct):
    """
    Parameter to filter overridden resource list by intent path or site path or
    both.

    .. 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: Global resource path
        :type  site_path: :class:`str` or ``None``
        :param site_path: Site path
        """
        self.intent_path = intent_path
        self.site_path = site_path
        VapiStruct.__init__(self)


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



class PacketAddressClassifier(VapiStruct):
    """
    A packet is classified to have an address binding, if its address
    configuration matches with all user specified properties.

    .. 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': 'vlan',
                            }

    def __init__(self,
                 ip_address=None,
                 mac_address=None,
                 vlan=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: A single IP address or a subnet, e.g. x.x.x.x or x.x.x.x/y format:
            address-or-block-or-range
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: A single MAC address format: mac-address
        :type  vlan: :class:`long` or ``None``
        :param vlan: Virtual Local Area Network Identifier format: int64
        """
        self.ip_address = ip_address
        self.mac_address = mac_address
        self.vlan = vlan
        VapiStruct.__init__(self)


PacketAddressClassifier._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.packet_address_classifier', {
        'ip_address': type.OptionalType(type.StringType()),
        'mac_address': type.OptionalType(type.StringType()),
        'vlan': type.OptionalType(type.IntegerType()),
    },
    PacketAddressClassifier,
    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: When this flag is set, traceflow packet will have its destination
            overwritten as the gateway address of the logical router to which
            the source logical switch is connected. More specifically: - For
            ARP request, the target IP will be overwritten as gateway IP if the
            target IP is not in the same subnet of gateway. - For ARP response,
            the target IP and destination MAC will be overwritten as gateway
            IP/MAC respectively, if the target IP is not in the same subnet of
            gateway. - For IP packet, the destination MAC will be overwritten
            as gateway MAC. However, this flag will not be effective when
            injecting the traceflow packet to a VLAN backed port. This is
            because the gateway in this case is a physical gateway that is
            outside the scope of NSX. Therefore, users need to manually
            populate the gateway MAC address. If the user still sets this flag
            in this case, a validation error will be thrown.
        :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`
            
            This type takes effect only for IP 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 PacketNumberSampling(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PacketNumberSampling"
    """
    Identifier denoting this class, when it is used 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 = {
                            'sampling_rate': 'sampling_rate',
                            'sampling_type': 'sampling_type',
                            }

    def __init__(self,
                 sampling_rate=None,
                 sampling_type='PacketNumberSampling',
                ):
        """
        :type  sampling_rate: :class:`long` or ``None``
        :param sampling_rate: 1 out of how many packets is sampled format: int64
        :type  sampling_type: :class:`str`
        :param sampling_type: Possible values are: 
            
            * :attr:`SamplingArgument.SAMPLING_TYPE_FIRSTNSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_PACKETNUMBERSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_INTERVALSAMPLING`
            
            Sampling type
        """
        self.sampling_rate = sampling_rate
        self._sampling_type = sampling_type
        VapiStruct.__init__(self)

    @property
    def sampling_type(self):
        """
        Return the discriminator value
        """
        return self._sampling_type

PacketNumberSampling._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.packet_number_sampling', {
        'sampling_rate': type.OptionalType(type.IntegerType()),
        'sampling_type': type.StringType(),
    },
    PacketNumberSampling,
    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 activate/deactivate 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 PathPrefixListRequestParameter(VapiStruct):
    """
    List of path-prefix values for which the quota-status is required.

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



    _canonical_to_pep_names = {
                            'path_prefixes': 'path_prefixes',
                            }

    def __init__(self,
                 path_prefixes=None,
                ):
        """
        :type  path_prefixes: :class:`list` of :class:`str` or ``None``
        :param path_prefixes: The array contains path-prefix
        """
        self.path_prefixes = path_prefixes
        VapiStruct.__init__(self)


PathPrefixListRequestParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.path_prefix_list_request_parameter', {
        'path_prefixes': type.OptionalType(type.ListType(type.StringType())),
    },
    PathPrefixListRequestParameter,
    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 PerNodeShaPluginStatusListResult(VapiStruct):
    """
    Paged list of Sha plugin status 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_: 
        :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:`PluginStatusEntry` or ``None``
        :param results: Sha plugin status 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)


PerNodeShaPluginStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.per_node_sha_plugin_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__, 'PluginStatusEntry'))),
    },
    PerNodeShaPluginStatusListResult,
    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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'gateway_path': 'gateway_path',
                            'pim_rp_mappings_per_edge': 'pim_rp_mappings_per_edge',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 gateway_path=None,
                 pim_rp_mappings_per_edge=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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  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.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.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', {
        '_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()),
        '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 PktCapResource(VapiStruct):
    """
    The resource of packet capture per port, such as the downloading URL of
    packet capture file.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PktCapResource"
    """
    Identifier denoting this class, when it is used 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 = {
                            'pktcap_file_download_url': 'pktcap_file_download_url',
                            'port_id': 'port_id',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 pktcap_file_download_url=None,
                 port_id=None,
                 resource_type='PktCapResource',
                ):
        """
        :type  pktcap_file_download_url: :class:`str` or ``None``
        :param pktcap_file_download_url: Packet capture file download URL
            This 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_id: :class:`str` or ``None``
        :param port_id: The ID of logical port where packet capture action is performed
            This 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 of packet capture resource
        """
        self.pktcap_file_download_url = pktcap_file_download_url
        self.port_id = port_id
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

PktCapResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pkt_cap_resource', {
        'pktcap_file_download_url': type.OptionalType(type.StringType()),
        'port_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    PktCapResource,
    False,
    None))



class PktCapResult(VapiStruct):
    """
    The packet capture result for transport nodes

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


    """
    TRANSPORT_NODE_TYPE_RHELKVM = "RHELKVM"
    """


    """
    TRANSPORT_NODE_TYPE_UBUNTUKVM = "UBUNTUKVM"
    """


    """
    TRANSPORT_NODE_TYPE_CENTOSKVM = "CENTOSKVM"
    """


    """
    TRANSPORT_NODE_TYPE_RHELCONTAINER = "RHELCONTAINER"
    """


    """
    TRANSPORT_NODE_TYPE_CENTOSCONTAINER = "CENTOSCONTAINER"
    """


    """
    TRANSPORT_NODE_TYPE_RHELSERVER = "RHELSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_UBUNTUSERVER = "UBUNTUSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_CENTOSSERVER = "CENTOSSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_SLESKVM = "SLESKVM"
    """


    """
    TRANSPORT_NODE_TYPE_SLESSERVER = "SLESSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_WINDOWSSERVER = "WINDOWSSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_RHELSMARTNIC = "RHELSMARTNIC"
    """


    """
    TRANSPORT_NODE_TYPE_OELSERVER = "OELSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC = "UBUNTUSMARTNIC"
    """


    """
    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 = {
                            'pktcap_resource_list': 'pktcap_resource_list',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 pktcap_resource_list=None,
                 transport_node_id=None,
                 transport_node_type=None,
                ):
        """
        :type  pktcap_resource_list: :class:`list` of :class:`PktCapResource` or ``None``
        :param pktcap_resource_list: The packet capture resource info for ports where packet capture
            action is performed
            This 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: The ID of transport node where packet capture action is deployed
            This 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:`PktCapResult.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_CENTOSKVM`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`PktCapResult.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`PktCapResult.TRANSPORT_NODE_TYPE_HYPERV`
            
            Type 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.
        """
        self.pktcap_resource_list = pktcap_resource_list
        self.transport_node_id = transport_node_id
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)


PktCapResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pkt_cap_result', {
        'pktcap_resource_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PktCapResource'))),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    PktCapResult,
    False,
    None))



class PktcapActionArgument(VapiStruct):
    """


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


    """
    PKTCAP_TYPE_BI_DIRECTIONAL = "BI_DIRECTIONAL"
    """


    """



    _canonical_to_pep_names = {
                            'dest_lport': 'dest_lport',
                            'pktcap_type': 'pktcap_type',
                            'reverse_filter': 'reverse_filter',
                            }

    def __init__(self,
                 dest_lport=None,
                 pktcap_type=None,
                 reverse_filter=None,
                ):
        """
        :type  dest_lport: :class:`str` or ``None``
        :param dest_lport: It is required only when the type of packet capture is
            bidirectional. Please keep this aligned with the destination
            logical port of count action and trace action config when the type
            of count action trace action is bidirectional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pktcap_type: :class:`str` or ``None``
        :param pktcap_type: Possible values are: 
            
            * :attr:`PktcapActionArgument.PKTCAP_TYPE_UNI_DIRECTIONAL`
            * :attr:`PktcapActionArgument.PKTCAP_TYPE_BI_DIRECTIONAL`
            
            Type of packet capture
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reverse_filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param reverse_filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        """
        self.dest_lport = dest_lport
        self.pktcap_type = pktcap_type
        self.reverse_filter = reverse_filter
        VapiStruct.__init__(self)


PktcapActionArgument._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pktcap_action_argument', {
        'dest_lport': type.OptionalType(type.StringType()),
        'pktcap_type': type.OptionalType(type.StringType()),
        'reverse_filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
    },
    PktcapActionArgument,
    False,
    None))



class PktcapActionConfig(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'action_argument': 'action_argument',
                            'sampling_argument': 'sampling_argument',
                            }

    def __init__(self,
                 action_argument=None,
                 sampling_argument=None,
                ):
        """
        :type  action_argument: :class:`PktcapActionArgument` or ``None``
        :param action_argument: 
        :type  sampling_argument: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param sampling_argument: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`SamplingArgument`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`SamplingArgument`.
        """
        self.action_argument = action_argument
        self.sampling_argument = sampling_argument
        VapiStruct.__init__(self)


PktcapActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pktcap_action_config', {
        'action_argument': type.OptionalType(type.ReferenceType(__name__, 'PktcapActionArgument')),
        'sampling_argument': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'SamplingArgument')])),
    },
    PktcapActionConfig,
    False,
    None))



class PlainFilterData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PlainFilterData"
    """
    Identifier denoting this class, when it is used 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 = {
                            'basic_filter': 'basic_filter',
                            'extend_filter': 'extend_filter',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 basic_filter=None,
                 extend_filter=None,
                 resource_type='PlainFilterData',
                ):
        """
        :type  basic_filter: :class:`str` or ``None``
        :param basic_filter: Basic RCF rule for packet filter
        :type  extend_filter: :class:`str` or ``None``
        :param extend_filter: Extended RCF rule for packet filter
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LiveTraceFilterData.RESOURCE_TYPE_FIELDSFILTERDATA`
            * :attr:`LiveTraceFilterData.RESOURCE_TYPE_PLAINFILTERDATA`
            
            Filter type
        """
        self.basic_filter = basic_filter
        self.extend_filter = extend_filter
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

PlainFilterData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.plain_filter_data', {
        'basic_filter': type.OptionalType(type.StringType()),
        'extend_filter': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    PlainFilterData,
    False,
    None))



class PlatformDeploymentChecksAction(VapiStruct):
    """
    Pre/post deployment checks.

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


    """
    ACTION_POST_CHECKS = "POST_CHECKS"
    """


    """
    ACTION_ABORT_CHECKS = "ABORT_CHECKS"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'deployment_config': 'deployment_config',
                            }

    def __init__(self,
                 action=None,
                 deployment_config=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`PlatformDeploymentChecksAction.ACTION_PRE_CHECKS`
            * :attr:`PlatformDeploymentChecksAction.ACTION_POST_CHECKS`
            * :attr:`PlatformDeploymentChecksAction.ACTION_ABORT_CHECKS`
            
            Run pre/post deployment checks. PRE_CHECKS - Run pre-check before
            deployment. POST_CHECKS - Run post-check after deployment.
            ABORT_CHECKS - Abort running pre/post deployement checks.
        :type  deployment_config: :class:`PlatformDeploymentConfig` or ``None``
        :param deployment_config: 
        """
        self.action = action
        self.deployment_config = deployment_config
        VapiStruct.__init__(self)


PlatformDeploymentChecksAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.platform_deployment_checks_action', {
        'action': type.OptionalType(type.StringType()),
        'deployment_config': type.OptionalType(type.ReferenceType(__name__, 'PlatformDeploymentConfig')),
    },
    PlatformDeploymentChecksAction,
    False,
    None))



class PlatformDeploymentConfig(VapiStruct):
    """
    Configuration for NSX Application Platform deployment.

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


    """
    FORM_FACTOR_ADVANCED = "advanced"
    """


    """
    FORM_FACTOR_EVALUATION = "evaluation"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cluster_id': 'cluster_id',
                            'deployment_action': 'deployment_action',
                            'kubeconf_info': 'kubeconf_info',
                            'storage_class': 'storage_class',
                            'version': 'version',
                            'form_factor': 'form_factor',
                            'service_config': 'service_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cluster_id=None,
                 deployment_action=None,
                 kubeconf_info=None,
                 storage_class=None,
                 version=None,
                 form_factor=None,
                 service_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_id: :class:`str` or ``None``
        :param cluster_id: Unique id to identify kubernetes guest cluster.
        :type  deployment_action: :class:`CloudNativeDeploymentAction` or ``None``
        :param deployment_action: 
        :type  kubeconf_info: :class:`KubeconfigInfo` or ``None``
        :param kubeconf_info: 
        :type  storage_class: :class:`str` or ``None``
        :param storage_class: Kubernetes cluster storage class
        :type  version: :class:`str` or ``None``
        :param version: Deployment version in use.
        :type  form_factor: :class:`str` or ``None``
        :param form_factor: Possible values are: 
            
            * :attr:`PlatformDeploymentConfig.FORM_FACTOR_STANDARD`
            * :attr:`PlatformDeploymentConfig.FORM_FACTOR_ADVANCED`
            * :attr:`PlatformDeploymentConfig.FORM_FACTOR_EVALUATION`
            
            From factor is use for deployment.
        :type  service_config: :class:`AdvanceServiceConfig` or ``None``
        :param service_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cluster_id = cluster_id
        self.deployment_action = deployment_action
        self.kubeconf_info = kubeconf_info
        self.storage_class = storage_class
        self.version = version
        self.form_factor = form_factor
        self.service_config = service_config
        VapiStruct.__init__(self)


PlatformDeploymentConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.platform_deployment_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_id': type.OptionalType(type.StringType()),
        'deployment_action': type.OptionalType(type.ReferenceType(__name__, 'CloudNativeDeploymentAction')),
        'kubeconf_info': type.OptionalType(type.ReferenceType(__name__, 'KubeconfigInfo')),
        'storage_class': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
        'form_factor': type.OptionalType(type.StringType()),
        'service_config': type.OptionalType(type.ReferenceType(__name__, 'AdvanceServiceConfig')),
    },
    PlatformDeploymentConfig,
    False,
    None))



class PlatformFormFactors(VapiStruct):
    """
    Available platform form factors.

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



    _canonical_to_pep_names = {
                            'available_form_factors': 'available_form_factors',
                            }

    def __init__(self,
                 available_form_factors=None,
                ):
        """
        :type  available_form_factors: :class:`FormFactors` or ``None``
        :param available_form_factors: 
        """
        self.available_form_factors = available_form_factors
        VapiStruct.__init__(self)


PlatformFormFactors._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.platform_form_factors', {
        'available_form_factors': type.OptionalType(type.ReferenceType(__name__, 'FormFactors')),
    },
    PlatformFormFactors,
    False,
    None))



class PluginStatusEntry(VapiStruct):
    """
    Describes plugin status

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


    """
    STATUS_ENABLED = "ENABLED"
    """


    """
    STATUS_DISABLED = "DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'detail': 'detail',
                            'node_path': 'node_path',
                            'plugin_path': 'plugin_path',
                            'profile': 'profile',
                            'status': 'status',
                            }

    def __init__(self,
                 detail=None,
                 node_path=None,
                 plugin_path=None,
                 profile=None,
                 status=None,
                ):
        """
        :type  detail: :class:`str` or ``None``
        :param detail: Detail information of plugin.
            This 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: Show the report node path of the plugin.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  plugin_path: :class:`str` or ``None``
        :param plugin_path: Plugin 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  profile: :class:`str` or ``None``
        :param profile: Display the plugin configß content.
            This 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:`PluginStatusEntry.STATUS_UNKNOWN`
            * :attr:`PluginStatusEntry.STATUS_ENABLED`
            * :attr:`PluginStatusEntry.STATUS_DISABLED`
            
            Plugin 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.detail = detail
        self.node_path = node_path
        self.plugin_path = plugin_path
        self.profile = profile
        self.status = status
        VapiStruct.__init__(self)


PluginStatusEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.plugin_status_entry', {
        'detail': type.OptionalType(type.StringType()),
        'node_path': type.OptionalType(type.StringType()),
        'plugin_path': type.OptionalType(type.StringType()),
        'profile': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    PluginStatusEntry,
    False,
    None))



class PmaasCompatibilityCheckListResult(VapiStruct):
    """
    Paged Collection of NSX+ compatibility check 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_: 
        :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:`PmaasCompatibilityCheckResult` or ``None``
        :param results: NSX+ compatibility check 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)


PmaasCompatibilityCheckListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pmaas_compatibility_check_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__, 'PmaasCompatibilityCheckResult'))),
    },
    PmaasCompatibilityCheckListResult,
    False,
    None))



class PmaasCompatibilityCheckResult(VapiStruct):
    """
    Result of prechecks run for onboarding remote site. The checks include NSX
    version compatibility with NSX+, Round Trip Time (RTT), etc. Note that some
    of checks like RTT are soft limits. While the NSX+ compatible field remains
    PENDING the client should continue to intermittently re-read to determine
    when the validation is complete.

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


    """
    PMAAS_COMPATIBLE_PENDING = "PENDING"
    """


    """
    PMAAS_COMPATIBLE_INCOMPATIBLE = "INCOMPATIBLE"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'compatibility_error_message': 'compatibility_error_message',
                            'pmaas_compatible': 'pmaas_compatible',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 compatibility_error_message=None,
                 pmaas_compatible=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  compatibility_error_message: :class:`str` or ``None``
        :param compatibility_error_message: Result of prechecks run for onboarding remoet site to NSX+. When
            the Site is found to be INCOMPATIBLE this field will contain
            appropriate information or error message.
        :type  pmaas_compatible: :class:`str` or ``None``
        :param pmaas_compatible: Possible values are: 
            
            * :attr:`PmaasCompatibilityCheckResult.PMAAS_COMPATIBLE_COMPATIBLE`
            * :attr:`PmaasCompatibilityCheckResult.PMAAS_COMPATIBLE_PENDING`
            *
              :attr:`PmaasCompatibilityCheckResult.PMAAS_COMPATIBLE_INCOMPATIBLE`
            
            Result of prechecks run for onboarding remote site. While the NSX+
            compatible field remains PENDING the client should continue to
            intermittently re-read to determine when the validation is
            complete.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.compatibility_error_message = compatibility_error_message
        self.pmaas_compatible = pmaas_compatible
        VapiStruct.__init__(self)


PmaasCompatibilityCheckResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pmaas_compatibility_check_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'compatibility_error_message': type.OptionalType(type.StringType()),
        'pmaas_compatible': type.OptionalType(type.StringType()),
    },
    PmaasCompatibilityCheckResult,
    False,
    None))



class PmaasSiteOffBoardingStatus(VapiStruct):
    """
    Represents and maintains NSX+ site offboarding status.

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


    """
    STATE_DISCONNECT_SITE = "DISCONNECT_SITE"
    """


    """
    STATE_CLEANUP = "CLEANUP"
    """


    """
    STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'message': 'message',
                            'state': 'state',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 message=None,
                 state=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`PmaasSiteOffBoardingStatus.STATE_PRECHECK`
            * :attr:`PmaasSiteOffBoardingStatus.STATE_DISCONNECT_SITE`
            * :attr:`PmaasSiteOffBoardingStatus.STATE_CLEANUP`
            
            Contains site offboading 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  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`PmaasSiteOffBoardingStatus.STATUS_IN_PROGRESS`
            * :attr:`PmaasSiteOffBoardingStatus.STATUS_FAILED`
            * :attr:`PmaasSiteOffBoardingStatus.STATUS_SUCCESSFUL`
            
            Contains status of site offboarding 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.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.message = message
        self.state = state
        self.status = status
        VapiStruct.__init__(self)


PmaasSiteOffBoardingStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pmaas_site_off_boarding_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'state': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    PmaasSiteOffBoardingStatus,
    False,
    None))



class Pnic(VapiStruct):
    """
    Physical NIC specification

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



    _canonical_to_pep_names = {
                            'device_name': 'device_name',
                            'uplink_name': 'uplink_name',
                            }

    def __init__(self,
                 device_name=None,
                 uplink_name=None,
                ):
        """
        :type  device_name: :class:`str` or ``None``
        :param device_name: device name or key
        :type  uplink_name: :class:`str` or ``None``
        :param uplink_name: Uplink name for this Pnic. This name will be used to reference this
            Pnic in other configurations.
        """
        self.device_name = device_name
        self.uplink_name = uplink_name
        VapiStruct.__init__(self)


Pnic._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pnic', {
        'device_name': type.OptionalType(type.StringType()),
        'uplink_name': type.OptionalType(type.StringType()),
    },
    Pnic,
    False,
    None))



class PnicBondStatus(VapiStruct):
    """
    pNIC/bond statuses

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


    """
    NSX_TYPE_NSX = "NSX"
    """


    """
    NSX_TYPE_NONNSX = "NONNSX"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    TYPE_UNKNOWN_TYPE = "UNKNOWN_TYPE"
    """


    """
    TYPE_PNIC = "PNIC"
    """


    """
    TYPE_BOND = "BOND"
    """


    """



    _canonical_to_pep_names = {
                            'bond_pnics': 'bond_pnics',
                            'name': 'name',
                            'nsx_type': 'nsx_type',
                            'status': 'status',
                            'type': 'type',
                            }

    def __init__(self,
                 bond_pnics=None,
                 name=None,
                 nsx_type=None,
                 status=None,
                 type=None,
                ):
        """
        :type  bond_pnics: :class:`list` of :class:`BondPnicStatus` or ``None``
        :param bond_pnics: The list of Pnics when type is Bond
        :type  name: :class:`str` or ``None``
        :param name: Name of the pNIC/bond
        :type  nsx_type: :class:`str` or ``None``
        :param nsx_type: Possible values are: 
            
            * :attr:`PnicBondStatus.NSX_TYPE_UNKNOWN_NSX_TYPE`
            * :attr:`PnicBondStatus.NSX_TYPE_NSX`
            * :attr:`PnicBondStatus.NSX_TYPE_NONNSX`
            
            Whether to be used by nsx
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`PnicBondStatus.STATUS_UNKNOWN`
            * :attr:`PnicBondStatus.STATUS_UP`
            * :attr:`PnicBondStatus.STATUS_DOWN`
            * :attr:`PnicBondStatus.STATUS_DEGRADED`
            
            Status of pNIC/bond
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`PnicBondStatus.TYPE_UNKNOWN_TYPE`
            * :attr:`PnicBondStatus.TYPE_PNIC`
            * :attr:`PnicBondStatus.TYPE_BOND`
            
            type, whether the object is a pNIC or a bond
        """
        self.bond_pnics = bond_pnics
        self.name = name
        self.nsx_type = nsx_type
        self.status = status
        self.type = type
        VapiStruct.__init__(self)


PnicBondStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pnic_bond_status', {
        'bond_pnics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BondPnicStatus'))),
        'name': type.OptionalType(type.StringType()),
        'nsx_type': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    PnicBondStatus,
    False,
    None))



class PnicBondStatusListResult(VapiStruct):
    """
    This object contains reference to list of pNIC/bond statuses

    .. 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_: 
        :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:`PnicBondStatus` or ``None``
        :param results: List of pNIC statuses belonging to the transport node
        """
        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)


PnicBondStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pnic_bond_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__, 'PnicBondStatus'))),
    },
    PnicBondStatusListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 PolicyAdvertisedNetwork(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'network': 'network',
                            'rule_filter_type': 'rule_filter_type',
                            'status': 'status',
                            }

    def __init__(self,
                 network=None,
                 rule_filter_type=None,
                 status=None,
                ):
        """
        :type  network: :class:`str` or ``None``
        :param network: Advertised network 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  rule_filter_type: :class:`str` or ``None``
        :param rule_filter_type: Advertised rule filter 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  status: :class:`str` or ``None``
        :param status: advertisement status of network to connected gateway SUCCESS -
            network route successfully plumbed on target gateway
            DENIED_BY_TARGET_GATEWAY - network denied by target gateway because
            of in filter rules or missing inter vrf config
            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.network = network
        self.rule_filter_type = rule_filter_type
        self.status = status
        VapiStruct.__init__(self)


PolicyAdvertisedNetwork._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_advertised_network', {
        'network': type.OptionalType(type.StringType()),
        'rule_filter_type': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    PolicyAdvertisedNetwork,
    False,
    None))



class PolicyAdvertisedNetworkInCsvFormat(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:`AdvertisedNetworkCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


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



class PolicyAdvertisedNetworksListResult(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_: 
        :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:`PolicyAdvertisedNetwork` or ``None``
        :param results: List of networks which advertised to connected 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.
        """
        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)


PolicyAdvertisedNetworksListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_advertised_networks_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__, 'PolicyAdvertisedNetwork'))),
    },
    PolicyAdvertisedNetworksListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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: 
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PolicyAntreaEgress(VapiStruct):
    """
    Antrea egress member details

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



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            'egress_ip': 'egress_ip',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 egress_ip=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  egress_ip: :class:`str` or ``None``
        :param egress_ip: The Antrea egress ip of antrea egress resource
            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.external_id = external_id
        self.egress_ip = egress_ip
        VapiStruct.__init__(self)


PolicyAntreaEgress._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_antrea_egress', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'egress_ip': type.OptionalType(type.StringType()),
    },
    PolicyAntreaEgress,
    False,
    None))



class PolicyAntreaIPPool(VapiStruct):
    """
    Antrea IPPool member details

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



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            'ip_ranges': 'ip_ranges',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 ip_ranges=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            This 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_ranges: :class:`list` of :class:`PolicyAntreaIPPoolIPRange` or ``None``
        :param ip_ranges: The ip_ranges of antrea ippool resource
        """
        self.display_name = display_name
        self.external_id = external_id
        self.ip_ranges = ip_ranges
        VapiStruct.__init__(self)


PolicyAntreaIPPool._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_antrea_IP_pool', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'ip_ranges': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAntreaIPPoolIPRange'))),
    },
    PolicyAntreaIPPool,
    False,
    None))



class PolicyAntreaIPPoolIPRange(VapiStruct):
    """
    IP range of antrea ip pool resource

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



    _canonical_to_pep_names = {
                            'cidr': 'cidr',
                            'end': 'end',
                            'gateway': 'gateway',
                            'prefix_length': 'prefix_length',
                            'start': 'start',
                            'vlan': 'vlan',
                            }

    def __init__(self,
                 cidr=None,
                 end=None,
                 gateway=None,
                 prefix_length=None,
                 start=None,
                 vlan=None,
                ):
        """
        :type  cidr: :class:`str` or ``None``
        :param cidr: The cidr representation of ip address of antrea ippool resource
            This 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:`str` or ``None``
        :param end: The end ip address of antrea ippool resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  gateway: :class:`str` or ``None``
        :param gateway: The gateway ipaddress of antrea ippool resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  prefix_length: :class:`long` or ``None``
        :param prefix_length: The prefix length of antrea ippool resource format: int64
            This 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: :class:`str` or ``None``
        :param start: The start ip address of antrea ippool resource
            This 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: :class:`long` or ``None``
        :param vlan: The vlan of antrea ippool resource format: int64
            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.cidr = cidr
        self.end = end
        self.gateway = gateway
        self.prefix_length = prefix_length
        self.start = start
        self.vlan = vlan
        VapiStruct.__init__(self)


PolicyAntreaIPPoolIPRange._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_antrea_IP_pool_IP_range', {
        'cidr': type.OptionalType(type.StringType()),
        'end': type.OptionalType(type.StringType()),
        'gateway': type.OptionalType(type.StringType()),
        'prefix_length': type.OptionalType(type.IntegerType()),
        'start': type.OptionalType(type.StringType()),
        'vlan': type.OptionalType(type.IntegerType()),
    },
    PolicyAntreaIPPoolIPRange,
    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 PolicyArpProxyEntry(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'arp_proxy_ip': 'arp_proxy_ip',
                            'service_id': 'service_id',
                            }

    def __init__(self,
                 arp_proxy_ip=None,
                 service_id=None,
                ):
        """
        :type  arp_proxy_ip: :class:`list` of :class:`str` or ``None``
        :param arp_proxy_ip: ARP proxy information for a service with 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.
        :type  service_id: :class:`str` or ``None``
        :param service_id: Identifier of connected service on 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.arp_proxy_ip = arp_proxy_ip
        self.service_id = service_id
        VapiStruct.__init__(self)


PolicyArpProxyEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_arp_proxy_entry', {
        'arp_proxy_ip': type.OptionalType(type.ListType(type.StringType())),
        'service_id': type.OptionalType(type.StringType()),
    },
    PolicyArpProxyEntry,
    False,
    None))



class PolicyArpProxyTableCsvListResult(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:`InterfaceArpProxyCsvEntry` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


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



class PolicyArpProxyTableListResult(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_: 
        :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:`InterfaceArpProxy` or ``None``
        :param results: Paginated list of Gateway interface ARP proxy tables
            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)


PolicyArpProxyTableListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_arp_proxy_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__, 'InterfaceArpProxy'))),
    },
    PolicyArpProxyTableListResult,
    False,
    None))



class PolicyAttributes(VapiStruct):
    """
    Policy Attributes data holder

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


    """
    ATTRIBUTE_SOURCE_CUSTOM = "CUSTOM"
    """


    """
    DATATYPE_STRING = "STRING"
    """


    """
    KEY_APP_ID = "APP_ID"
    """


    """
    KEY_DOMAIN_NAME = "DOMAIN_NAME"
    """


    """
    KEY_URL_CATEGORY = "URL_CATEGORY"
    """


    """
    KEY_URL_REPUTATION = "URL_REPUTATION"
    """


    """
    KEY_CUSTOM_URL = "CUSTOM_URL"
    """


    """



    _canonical_to_pep_names = {
                            'attribute_source': 'attribute_source',
                            'custom_url_partial_match': 'custom_url_partial_match',
                            'datatype': 'datatype',
                            'description': 'description',
                            'isALGType': 'is_alg_type',
                            'key': 'key',
                            'metadata': 'metadata',
                            'sub_attributes': 'sub_attributes',
                            'value': 'value',
                            }

    def __init__(self,
                 attribute_source=None,
                 custom_url_partial_match=None,
                 datatype=None,
                 description=None,
                 is_alg_type=None,
                 key=None,
                 metadata=None,
                 sub_attributes=None,
                 value=None,
                ):
        """
        :type  attribute_source: :class:`str` or ``None``
        :param attribute_source: Possible values are: 
            
            * :attr:`PolicyAttributes.ATTRIBUTE_SOURCE_SYSTEM`
            * :attr:`PolicyAttributes.ATTRIBUTE_SOURCE_CUSTOM`
            
            Source of attribute value i.e whether system defined or custom
            value
        :type  custom_url_partial_match: :class:`bool` or ``None``
        :param custom_url_partial_match: True value for this flag will be treated as a partial match for
            custom url
        :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`
            * :attr:`PolicyAttributes.KEY_URL_REPUTATION`
            * :attr:`PolicyAttributes.KEY_CUSTOM_URL`
            
            URL_Reputation is currently not available. Please do not use it in
            Attribute Key while creating context profile
        :type  metadata: :class:`list` of :class:`ContextProfileAttributesMetadata` or ``None``
        :param metadata: This is optional part that can hold additional data about the
            attribute key/values. Example - For URL CATEGORY key , it specified
            super category for url category value. This is generic array and
            can hold multiple meta information about key/values in future
        :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.attribute_source = attribute_source
        self.custom_url_partial_match = custom_url_partial_match
        self.datatype = datatype
        self.description = description
        self.is_alg_type = is_alg_type
        self.key = key
        self.metadata = metadata
        self.sub_attributes = sub_attributes
        self.value = value
        VapiStruct.__init__(self)


PolicyAttributes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_attributes', {
        'attribute_source': type.OptionalType(type.StringType()),
        'custom_url_partial_match': type.OptionalType(type.BooleanType()),
        'datatype': type.OptionalType(type.StringType()),
        'description': type.OptionalType(type.StringType()),
        'isALGType': type.OptionalType(type.BooleanType()),
        'key': type.OptionalType(type.StringType()),
        'metadata': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ContextProfileAttributesMetadata'))),
        'sub_attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicySubAttributes'))),
        'value': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyAttributes,
    False,
    None))



class PolicyBaseHostSwitchProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyBaseHostSwitchProfile"
    """
    Identifier denoting this class, when it is used 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_POLICYUPLINKHOSTSWITCHPROFILE = "PolicyUplinkHostSwitchProfile"
    """


    """
    RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE = "PolicyLldpHostSwitchProfile"
    """


    """
    RESOURCE_TYPE_POLICYNIOCPROFILE = "PolicyNiocProfile"
    """


    """
    RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE = "PolicyExtraConfigHostSwitchProfile"
    """


    """
    RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE = "PolicyVtepHAHostSwitchProfile"
    """


    """
    RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE = "PolicyHighPerformanceHostSwitchProfile"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'required_capabilities': 'required_capabilities',
                            }

    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='PolicyBaseHostSwitchProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 required_capabilities=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYUPLINKHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYNIOCPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  required_capabilities: :class:`list` of :class:`str` or ``None``
        :param required_capabilities: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.required_capabilities = required_capabilities
        VapiStruct.__init__(self)

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

PolicyBaseHostSwitchProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_base_host_switch_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'required_capabilities': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyBaseHostSwitchProfile,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'site_overrides': 'site_overrides',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 site_overrides=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. This property is mandatory
            on LM. It is required on GM only in case of site_overrides property
            not provided.
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Public IPV4 or IPV6 address of the remote device terminating the
            VPN connection. This property is mandatory on LM. It is required on
            GM only in case of site_overrides property not provided. Please
            note that configuring peer_address as IPv6 address is not supported
            in the deprecated IPSecVpnSession Patch/PUT APIs. format: ip
        :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. This property is mandatory on LM. It is required on GM
            only in case of site_overrides property not provided.
        :type  psk: :class:`str` or ``None``
        :param psk: IPSec Pre-shared key. Maximum length of this field is 128
            characters.
        :type  site_overrides: :class:`list` of :class:`SiteOverride` or ``None``
        :param site_overrides: A collection of site specific attributes specificed only on GM
        :type  tcp_mss_clamping: :class:`TcpMaximumSegmentSizeClamping` or ``None``
        :param tcp_mss_clamping: 
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.site_overrides = site_overrides
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'site_overrides': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteOverride'))),
        '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"
    """


    """
    TYPE_INTER_SR = "INTER_SR"
    """


    """
    TYPE_USER = "USER"
    """


    """



    _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',
                            'type': 'type',
                            }

    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=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: 
        :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 seconds) 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.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`PolicyBgpNeighborStatus.TYPE_INTER_SR`
            * :attr:`PolicyBgpNeighborStatus.TYPE_USER`
            
            BGP neighbor 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.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
        self.type = type
        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()),
        'type': type.OptionalType(type.StringType()),
    },
    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_: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 PolicyContainerGroupMemberDetails(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 = {
                            'cluster': 'cluster',
                            }

    def __init__(self,
                 cluster=None,
                ):
        """
        :type  cluster: :class:`list` of :class:`ClusterMemberDetails` or ``None``
        :param cluster: 
        """
        self.cluster = cluster
        VapiStruct.__init__(self)


PolicyContainerGroupMemberDetails._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_container_group_member_details', {
        'cluster': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ClusterMemberDetails'))),
    },
    PolicyContainerGroupMemberDetails,
    False,
    None))



class PolicyContainerGroupMembersListResult(VapiStruct):
    """
    Paginated collection of pods 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_: 
        :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:`PolicyContainerGroupMemberDetails` or ``None``
        :param results: Paged Collection of pods 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)


PolicyContainerGroupMembersListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_container_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__, 'PolicyContainerGroupMemberDetails'))),
    },
    PolicyContainerGroupMembersListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PolicyCountObservation(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'logical_port_path': 'logical_port_path',
                            'checkpoints': 'checkpoints',
                            'port_id': 'port_id',
                            'port_name': 'port_name',
                            'transport_node_id': 'transport_node_id',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 logical_port_path=None,
                 checkpoints=None,
                 port_id=None,
                 port_name=None,
                 transport_node_id=None,
                 resource_type=None,
                ):
        """
        :type  logical_port_path: :class:`str` or ``None``
        :param logical_port_path: The path of segment port or router port where the counter
            observation is populated
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  checkpoints: :class:`CheckpointCounterResult` or ``None``
        :param checkpoints: 
        :type  port_id: :class:`str` or ``None``
        :param port_id: The port identifier in UUID format. This field won't appear
            together with port_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  port_name: :class:`str` or ``None``
        :param port_name: The port name for a port. It applies to ports like the uplink port.
            This field won't appear together with port_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  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: This field tells which transport node the checkpoints are reported
            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  resource_type: :class:`str`
        :param resource_type: Type of count observation
        """
        self.logical_port_path = logical_port_path
        self.checkpoints = checkpoints
        self.port_id = port_id
        self.port_name = port_name
        self.transport_node_id = transport_node_id
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

PolicyCountObservation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_count_observation', {
        'logical_port_path': type.OptionalType(type.StringType()),
        'checkpoints': type.OptionalType(type.ReferenceType(__name__, 'CheckpointCounterResult')),
        'port_id': type.OptionalType(type.StringType()),
        'port_name': type.OptionalType(type.StringType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    PolicyCountObservation,
    False,
    None))



class PolicyCustomAttributes(VapiStruct):
    """
    Policy Custom Attributes data holder

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


    """
    ATTRIBUTE_SOURCE_SYSTEM = "SYSTEM"
    """


    """
    DATATYPE_STRING = "STRING"
    """


    """
    KEY_DOMAIN_NAME = "DOMAIN_NAME"
    """


    """
    KEY_CUSTOM_URL = "CUSTOM_URL"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attribute_source': 'attribute_source',
                            'datatype': 'datatype',
                            'key': 'key',
                            'metadata': 'metadata',
                            'sub_attributes': 'sub_attributes',
                            'value': 'value',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attribute_source=None,
                 datatype=None,
                 key=None,
                 metadata=None,
                 sub_attributes=None,
                 value=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description for attribute value
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  attribute_source: :class:`str` or ``None``
        :param attribute_source: Possible values are: 
            
            * :attr:`PolicyCustomAttributes.ATTRIBUTE_SOURCE_CUSTOM`
            * :attr:`PolicyCustomAttributes.ATTRIBUTE_SOURCE_SYSTEM`
            
            Source of attribute value i.e whether system defined or custom
            value
        :type  datatype: :class:`str` or ``None``
        :param datatype: Possible values are: 
            
            * :attr:`PolicyCustomAttributes.DATATYPE_STRING`
            
            Datatype for attribute
        :type  key: :class:`str` or ``None``
        :param key: Possible values are: 
            
            * :attr:`PolicyCustomAttributes.KEY_DOMAIN_NAME`
            * :attr:`PolicyCustomAttributes.KEY_CUSTOM_URL`
            
            Policy Custom Attribute Key
        :type  metadata: :class:`list` of :class:`ContextProfileAttributesMetadata` or ``None``
        :param metadata: This is optional part that can hold additional data about the
            attribute key/values. Example - For Custom URL key , it specified
            url type for url value. This is generic array and can hold multiple
            meta information about key/values in future
        :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.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attribute_source = attribute_source
        self.datatype = datatype
        self.key = key
        self.metadata = metadata
        self.sub_attributes = sub_attributes
        self.value = value
        VapiStruct.__init__(self)


PolicyCustomAttributes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_custom_attributes', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'attribute_source': type.OptionalType(type.StringType()),
        'datatype': type.OptionalType(type.StringType()),
        'key': type.OptionalType(type.StringType()),
        'metadata': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ContextProfileAttributesMetadata'))),
        'sub_attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicySubAttributes'))),
        'value': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyCustomAttributes,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cache_size': 'cache_size',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cache_size=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  cache_size: :class:`long` or ``None``
        :param cache_size: Cache size in KB. format: int32
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cache_size = cache_size
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'cache_size': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'system_area_store_id': 'system_area_store_id',
                            'user_area': 'user_area',
                            'user_area_store_id': 'user_area_store_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 system_area_store_id=None,
                 user_area=None,
                 user_area_store_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :type  system_area_store_id: :class:`str` or ``None``
        :param system_area_store_id: In case of a large draft, wherein the size of system_area is so big
            that it can not be stored into one draft object, the data is then
            gets stored into multiple chunks in a draft data store. This value
            represents the ID of that data store.
            This 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_area: :class:`Infra` or ``None``
        :param user_area: 
        :type  user_area_store_id: :class:`str` or ``None``
        :param user_area_store_id: In case of a large draft, wherein the size of user_area is so big
            that it can not be stored into one draft object, the data is then
            gets stored into multiple chunks in a draft data store. This value
            represents the ID of that data store.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.system_area_store_id = system_area_store_id
        self.user_area = user_area
        self.user_area_store_id = user_area_store_id
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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')),
        'system_area_store_id': type.OptionalType(type.StringType()),
        'user_area': type.OptionalType(type.ReferenceType(__name__, 'Infra')),
        'user_area_store_id': type.OptionalType(type.StringType()),
    },
    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_: 
        :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 PolicyDraftPaginatedAggregatedConfigurationResult(VapiStruct):
    """
    Paginated result of aggregated configuration of a policy draft

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



    _canonical_to_pep_names = {
                            'request_id': 'request_id',
                            'result': 'result',
                            }

    def __init__(self,
                 request_id=None,
                 result=None,
                ):
        """
        :type  request_id: :class:`str` or ``None``
        :param request_id: Request identifier to keep track of calculated aggregated
            configuration a draft during subsequent API calls after initial API
            call. This identifier can be use to fetch the detailed aggregated
            configuration at security policy level. Absence of request_id
            suggests that whole aggregated configuration has been returned as a
            response to initial API call, as the size of aggregated
            configuration is not big enough to need pagination.
            This 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: :class:`Infra` or ``None``
        :param result: 
        """
        self.request_id = request_id
        self.result = result
        VapiStruct.__init__(self)


PolicyDraftPaginatedAggregatedConfigurationResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_draft_paginated_aggregated_configuration_result', {
        'request_id': type.OptionalType(type.StringType()),
        'result': type.OptionalType(type.ReferenceType(__name__, 'Infra')),
    },
    PolicyDraftPaginatedAggregatedConfigurationResult,
    False,
    None))



class PolicyEdgeCluster(VapiStruct):
    """
    Edge Cluster.

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


    """
    MEMBER_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE = "PUBLIC_CLOUD_GATEWAY_NODE"
    """


    """
    MEMBER_NODE_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'inter_site_forwarding_enabled': 'inter_site_forwarding_enabled',
                            'member_node_type': 'member_node_type',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 inter_site_forwarding_enabled=None,
                 member_node_type=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  member_node_type: :class:`str` or ``None``
        :param member_node_type: Possible values are: 
            
            * :attr:`PolicyEdgeCluster.MEMBER_NODE_TYPE_EDGE_NODE`
            *
              :attr:`PolicyEdgeCluster.MEMBER_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`PolicyEdgeCluster.MEMBER_NODE_TYPE_UNKNOWN`
            
            Edge cluster is homogenous collection of transport nodes. Hence all
            transport nodes of the cluster must be of same type. This readonly
            field shows the type of 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  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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.member_node_type = member_node_type
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'member_node_type': type.OptionalType(type.StringType()),
        '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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'edge_cluster_path': 'edge_cluster_path',
                            'edge_nodes': 'edge_nodes',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 edge_cluster_path=None,
                 edge_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_: 
        :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_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.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_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', {
        '_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_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_: 
        :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: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 PolicyExtraConfig(VapiStruct):
    """
    Extra config is intended for supporting vendor specific configuration on
    the data path, it can be set as key value string pairs on logical switch,
    logical port or HostSwitch. If it was set on logical switch, it will be
    inherited automatically by logical ports in it. Also logical port setting
    will override logical switch setting if specific key was dual set on both
    logical switch and logical 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: 
        """
        self.config_pair = config_pair
        VapiStruct.__init__(self)


PolicyExtraConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_extra_config', {
        'config_pair': type.OptionalType(type.ReferenceType(__name__, 'UnboundedKeyValuePair')),
    },
    PolicyExtraConfig,
    False,
    None))



class PolicyExtraConfigHostSwitchProfile(VapiStruct):
    """
    Profile for extra configs in host switch

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyExtraConfigHostSwitchProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'extra_configs': 'extra_configs',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'required_capabilities': 'required_capabilities',
                            }

    def __init__(self,
                 extra_configs=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='PolicyExtraConfigHostSwitchProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 required_capabilities=None,
                ):
        """
        :type  extra_configs: :class:`list` of :class:`PolicyExtraConfig` or ``None``
        :param extra_configs: list of extra configs
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYUPLINKHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYNIOCPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  required_capabilities: :class:`list` of :class:`str` or ``None``
        :param required_capabilities: 
        """
        self.extra_configs = extra_configs
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.required_capabilities = required_capabilities
        VapiStruct.__init__(self)

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

PolicyExtraConfigHostSwitchProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_extra_config_host_switch_profile', {
        'extra_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyExtraConfig'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'required_capabilities': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyExtraConfigHostSwitchProfile,
    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: 
        """
        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 nodes.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            'applied_to': 'applied_to',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                 applied_to=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  applied_to: :class:`list` of :class:`str` or ``None``
        :param applied_to: The list of targets where the profile is intended to get applied.
            Valid targets are group paths.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.applied_to = applied_to
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'applied_to': type.OptionalType(type.ListType(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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PolicyFirewallIpReputationConfig(VapiStruct):
    """
    The type used to activate/deactivate IP reputation feed download.

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


    """
    DOWNLOAD_STATUS_COMPLETE = "COMPLETE"
    """


    """
    DOWNLOAD_STATUS_FAILED = "FAILED"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'download_frequency_in_mins': 'download_frequency_in_mins',
                            'download_status': 'download_status',
                            'enable_auto_download': 'enable_auto_download',
                            'last_feed_download': 'last_feed_download',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 download_frequency_in_mins=None,
                 download_status=None,
                 enable_auto_download=None,
                 last_feed_download=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_frequency_in_mins: :class:`long` or ``None``
        :param download_frequency_in_mins: The frequency at which IP Reputation feed will be downloaded. This
            is a readonly field showing the current time interval in minutes.
            The current value is set 720 mins (12 hrs). 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  download_status: :class:`str` or ``None``
        :param download_status: Possible values are: 
            
            *
              :attr:`PolicyFirewallIpReputationConfig.DOWNLOAD_STATUS_IN_PROGRESS`
            * :attr:`PolicyFirewallIpReputationConfig.DOWNLOAD_STATUS_COMPLETE`
            * :attr:`PolicyFirewallIpReputationConfig.DOWNLOAD_STATUS_FAILED`
            
            Indicates the download status of IP reputation feed.
            This 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_auto_download: :class:`bool` or ``None``
        :param enable_auto_download: Property which indicates whether auto-download of IP Reputation
            feed is activated or deactivated.
        :type  last_feed_download: :class:`long` or ``None``
        :param last_feed_download: Timestamp of the most recent successful feed download. format:
            int64
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.download_frequency_in_mins = download_frequency_in_mins
        self.download_status = download_status
        self.enable_auto_download = enable_auto_download
        self.last_feed_download = last_feed_download
        VapiStruct.__init__(self)


PolicyFirewallIpReputationConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_ip_reputation_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_frequency_in_mins': type.OptionalType(type.IntegerType()),
        'download_status': type.OptionalType(type.StringType()),
        'enable_auto_download': type.OptionalType(type.BooleanType()),
        'last_feed_download': type.OptionalType(type.IntegerType()),
    },
    PolicyFirewallIpReputationConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_: 
        :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 PolicyGroupAntreaEgressCluster(VapiStruct):
    """
    Details of the kubernetes cluster members belonging to a Group

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



    _canonical_to_pep_names = {
                            'antrea_egresses': 'antrea_egresses',
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            }

    def __init__(self,
                 antrea_egresses=None,
                 display_name=None,
                 external_id=None,
                ):
        """
        :type  antrea_egresses: :class:`list` of :class:`PolicyAntreaEgress` or ``None``
        :param antrea_egresses: 
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.antrea_egresses = antrea_egresses
        self.display_name = display_name
        self.external_id = external_id
        VapiStruct.__init__(self)


PolicyGroupAntreaEgressCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_antrea_egress_cluster', {
        'antrea_egresses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAntreaEgress'))),
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
    },
    PolicyGroupAntreaEgressCluster,
    False,
    None))



class PolicyGroupAntreaEgressList(VapiStruct):
    """
    Details of the antrea egresses belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupAntreaEgressCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupAntreaEgressList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_antrea_egress_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupAntreaEgressCluster'))),
    },
    PolicyGroupAntreaEgressList,
    False,
    None))



class PolicyGroupAntreaEgressListResult(VapiStruct):
    """
    Paginated collection of antrea egresses 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_: 
        :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:`PolicyGroupAntreaEgressList` or ``None``
        :param results: Paged Collection of antrea egresses 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)


PolicyGroupAntreaEgressListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_antrea_egress_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__, 'PolicyGroupAntreaEgressList'))),
    },
    PolicyGroupAntreaEgressListResult,
    False,
    None))



class PolicyGroupAntreaIPPoolCluster(VapiStruct):
    """
    Details of the kubernetes cluster members belonging to a Group

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



    _canonical_to_pep_names = {
                            'antrea_ip_pools': 'antrea_ip_pools',
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            }

    def __init__(self,
                 antrea_ip_pools=None,
                 display_name=None,
                 external_id=None,
                ):
        """
        :type  antrea_ip_pools: :class:`list` of :class:`PolicyAntreaIPPool` or ``None``
        :param antrea_ip_pools: 
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.antrea_ip_pools = antrea_ip_pools
        self.display_name = display_name
        self.external_id = external_id
        VapiStruct.__init__(self)


PolicyGroupAntreaIPPoolCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_antrea_IP_pool_cluster', {
        'antrea_ip_pools': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAntreaIPPool'))),
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
    },
    PolicyGroupAntreaIPPoolCluster,
    False,
    None))



class PolicyGroupAntreaIPPoolList(VapiStruct):
    """
    Details of the antrea ippools belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupAntreaIPPoolCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupAntreaIPPoolList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_antrea_IP_pool_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupAntreaIPPoolCluster'))),
    },
    PolicyGroupAntreaIPPoolList,
    False,
    None))



class PolicyGroupAntreaIPPoolListResult(VapiStruct):
    """
    Paginated collection of antrea ip pools 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_: 
        :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:`PolicyGroupAntreaIPPoolList` or ``None``
        :param results: Paged Collection of antrea ip pools 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)


PolicyGroupAntreaIPPoolListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_antrea_IP_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__, 'PolicyGroupAntreaIPPoolList'))),
    },
    PolicyGroupAntreaIPPoolListResult,
    False,
    None))



class PolicyGroupAssociatedKubernetesCluster(VapiStruct):
    """
    Details of the kubernetes cluster 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',
                            'external_id': 'external_id',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.display_name = display_name
        self.external_id = external_id
        VapiStruct.__init__(self)


PolicyGroupAssociatedKubernetesCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_associated_kubernetes_cluster', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
    },
    PolicyGroupAssociatedKubernetesCluster,
    False,
    None))



class PolicyGroupAssociatedKubernetesClusterList(VapiStruct):
    """
    Details of the kubernetes clusters belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupAssociatedKubernetesCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupAssociatedKubernetesClusterList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_associated_kubernetes_cluster_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupAssociatedKubernetesCluster'))),
    },
    PolicyGroupAssociatedKubernetesClusterList,
    False,
    None))



class PolicyGroupAssociatedKubernetesClusterListResult(VapiStruct):
    """
    Paginated collection of kubernetes clusters associated 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_: 
        :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:`PolicyGroupAssociatedKubernetesClusterList` or ``None``
        :param results: Paged Collection of kubernetes resources 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)


PolicyGroupAssociatedKubernetesClusterListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_associated_kubernetes_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__, 'PolicyGroupAssociatedKubernetesClusterList'))),
    },
    PolicyGroupAssociatedKubernetesClusterListResult,
    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_: 
        :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 PolicyGroupKubernetesGatewayCluster(VapiStruct):
    """
    Details of the kubernetes cluster members 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',
                            'external_id': 'external_id',
                            'namespaces': 'namespaces',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 namespaces=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.
        :type  namespaces: :class:`list` of :class:`PolicyGroupKubernetesGatewayNamespace` or ``None``
        :param namespaces: 
        """
        self.display_name = display_name
        self.external_id = external_id
        self.namespaces = namespaces
        VapiStruct.__init__(self)


PolicyGroupKubernetesGatewayCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_gateway_cluster', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'namespaces': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupKubernetesGatewayNamespace'))),
    },
    PolicyGroupKubernetesGatewayCluster,
    False,
    None))



class PolicyGroupKubernetesGatewayList(VapiStruct):
    """
    Details of the kubernetes gateways belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupKubernetesGatewayCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupKubernetesGatewayList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_gateway_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupKubernetesGatewayCluster'))),
    },
    PolicyGroupKubernetesGatewayList,
    False,
    None))



class PolicyGroupKubernetesGatewayListResult(VapiStruct):
    """
    Paginated collection of kubernetes gateways 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_: 
        :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:`PolicyGroupKubernetesGatewayList` or ``None``
        :param results: Paged Collection of kubernetes gateways 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)


PolicyGroupKubernetesGatewayListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_gateway_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__, 'PolicyGroupKubernetesGatewayList'))),
    },
    PolicyGroupKubernetesGatewayListResult,
    False,
    None))



class PolicyGroupKubernetesGatewayNamespace(VapiStruct):
    """
    Details of the kubernetes namespace members 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',
                            'external_id': 'external_id',
                            'kubernetes_gateways': 'kubernetes_gateways',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 kubernetes_gateways=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes namespace
            This 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: The id of kubernetes namespace
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  kubernetes_gateways: :class:`list` of :class:`PolicyKubernetesGateway` or ``None``
        :param kubernetes_gateways: 
        """
        self.display_name = display_name
        self.external_id = external_id
        self.kubernetes_gateways = kubernetes_gateways
        VapiStruct.__init__(self)


PolicyGroupKubernetesGatewayNamespace._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_gateway_namespace', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'kubernetes_gateways': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesGateway'))),
    },
    PolicyGroupKubernetesGatewayNamespace,
    False,
    None))



class PolicyGroupKubernetesIngressCluster(VapiStruct):
    """
    Details of the kubernetes cluster members 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',
                            'external_id': 'external_id',
                            'namespaces': 'namespaces',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 namespaces=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.
        :type  namespaces: :class:`list` of :class:`PolicyGroupKubernetesIngressNamespace` or ``None``
        :param namespaces: 
        """
        self.display_name = display_name
        self.external_id = external_id
        self.namespaces = namespaces
        VapiStruct.__init__(self)


PolicyGroupKubernetesIngressCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_ingress_cluster', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'namespaces': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupKubernetesIngressNamespace'))),
    },
    PolicyGroupKubernetesIngressCluster,
    False,
    None))



class PolicyGroupKubernetesIngressList(VapiStruct):
    """
    Details of the kubernetes ingress policies belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupKubernetesIngressCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupKubernetesIngressList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_ingress_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupKubernetesIngressCluster'))),
    },
    PolicyGroupKubernetesIngressList,
    False,
    None))



class PolicyGroupKubernetesIngressListResult(VapiStruct):
    """
    Paginated collection of kubernetes ingress policies 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_: 
        :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:`PolicyGroupKubernetesIngressList` or ``None``
        :param results: Paged Collection of kubernetes ingress policies 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)


PolicyGroupKubernetesIngressListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_ingress_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__, 'PolicyGroupKubernetesIngressList'))),
    },
    PolicyGroupKubernetesIngressListResult,
    False,
    None))



class PolicyGroupKubernetesIngressNamespace(VapiStruct):
    """
    Details of the kubernetes namespace members 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',
                            'external_id': 'external_id',
                            'kubernetes_ingresses': 'kubernetes_ingresses',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 kubernetes_ingresses=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes namespace
            This 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: The id of kubernetes namespace
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  kubernetes_ingresses: :class:`list` of :class:`PolicyKubernetesIngress` or ``None``
        :param kubernetes_ingresses: 
        """
        self.display_name = display_name
        self.external_id = external_id
        self.kubernetes_ingresses = kubernetes_ingresses
        VapiStruct.__init__(self)


PolicyGroupKubernetesIngressNamespace._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_ingress_namespace', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'kubernetes_ingresses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesIngress'))),
    },
    PolicyGroupKubernetesIngressNamespace,
    False,
    None))



class PolicyGroupKubernetesNodeCluster(VapiStruct):
    """
    Details of the kubernetes cluster members 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',
                            'external_id': 'external_id',
                            'kubernetes_nodes': 'kubernetes_nodes',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 kubernetes_nodes=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.
        :type  kubernetes_nodes: :class:`list` of :class:`PolicyKubernetesNode` or ``None``
        :param kubernetes_nodes: 
        """
        self.display_name = display_name
        self.external_id = external_id
        self.kubernetes_nodes = kubernetes_nodes
        VapiStruct.__init__(self)


PolicyGroupKubernetesNodeCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_node_cluster', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'kubernetes_nodes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesNode'))),
    },
    PolicyGroupKubernetesNodeCluster,
    False,
    None))



class PolicyGroupKubernetesNodeList(VapiStruct):
    """
    Details of the kubernetes nodes belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupKubernetesNodeCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupKubernetesNodeList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_node_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupKubernetesNodeCluster'))),
    },
    PolicyGroupKubernetesNodeList,
    False,
    None))



class PolicyGroupKubernetesNodeListResult(VapiStruct):
    """
    Paginated collection of kubernetes nodes 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_: 
        :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:`PolicyGroupKubernetesNodeList` or ``None``
        :param results: Paged Collection of kubernetes nodes 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)


PolicyGroupKubernetesNodeListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_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__, 'PolicyGroupKubernetesNodeList'))),
    },
    PolicyGroupKubernetesNodeListResult,
    False,
    None))



class PolicyGroupKubernetesServiceCluster(VapiStruct):
    """
    Details of the kubernetes cluster members 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',
                            'external_id': 'external_id',
                            'namespaces': 'namespaces',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 namespaces=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.
        :type  namespaces: :class:`list` of :class:`PolicyGroupKubernetesServiceNamespace` or ``None``
        :param namespaces: 
        """
        self.display_name = display_name
        self.external_id = external_id
        self.namespaces = namespaces
        VapiStruct.__init__(self)


PolicyGroupKubernetesServiceCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_service_cluster', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'namespaces': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupKubernetesServiceNamespace'))),
    },
    PolicyGroupKubernetesServiceCluster,
    False,
    None))



class PolicyGroupKubernetesServiceList(VapiStruct):
    """
    Details of the kubernetes services belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupKubernetesServiceCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupKubernetesServiceList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_service_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupKubernetesServiceCluster'))),
    },
    PolicyGroupKubernetesServiceList,
    False,
    None))



class PolicyGroupKubernetesServiceListResult(VapiStruct):
    """
    Paginated collection of kubernetes services 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_: 
        :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:`PolicyGroupKubernetesServiceList` or ``None``
        :param results: Paged Collection of kubernetes services 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)


PolicyGroupKubernetesServiceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_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__, 'PolicyGroupKubernetesServiceList'))),
    },
    PolicyGroupKubernetesServiceListResult,
    False,
    None))



class PolicyGroupKubernetesServiceNamespace(VapiStruct):
    """
    Details of the kubernetes namespace members 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',
                            'external_id': 'external_id',
                            'kubernetes_services': 'kubernetes_services',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 kubernetes_services=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes namespace
            This 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: The id of kubernetes namespace
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  kubernetes_services: :class:`list` of :class:`PolicyKubernetesService` or ``None``
        :param kubernetes_services: 
        """
        self.display_name = display_name
        self.external_id = external_id
        self.kubernetes_services = kubernetes_services
        VapiStruct.__init__(self)


PolicyGroupKubernetesServiceNamespace._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_kubernetes_service_namespace', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'kubernetes_services': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesService'))),
    },
    PolicyGroupKubernetesServiceNamespace,
    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_: 
        :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 PolicyGroupPodCidrCluster(VapiStruct):
    """
    Details of the kubernetes cluster members 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',
                            'external_id': 'external_id',
                            'kubernetes_nodes': 'kubernetes_nodes',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 kubernetes_nodes=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes 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.
        :type  external_id: :class:`str` or ``None``
        :param external_id: The id of kubernetes 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.
        :type  kubernetes_nodes: :class:`list` of :class:`PolicyKubernetesNodePodCidr` or ``None``
        :param kubernetes_nodes: Kubernetes nodes
        """
        self.display_name = display_name
        self.external_id = external_id
        self.kubernetes_nodes = kubernetes_nodes
        VapiStruct.__init__(self)


PolicyGroupPodCidrCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_pod_cidr_cluster', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'kubernetes_nodes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesNodePodCidr'))),
    },
    PolicyGroupPodCidrCluster,
    False,
    None))



class PolicyGroupPodCidrList(VapiStruct):
    """
    Details of the kubernetes node pod cidrs belonging to a policy Group

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



    _canonical_to_pep_names = {
                            'clusters': 'clusters',
                            }

    def __init__(self,
                 clusters=None,
                ):
        """
        :type  clusters: :class:`list` of :class:`PolicyGroupPodCidrCluster` or ``None``
        :param clusters: 
        """
        self.clusters = clusters
        VapiStruct.__init__(self)


PolicyGroupPodCidrList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_pod_cidr_list', {
        'clusters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupPodCidrCluster'))),
    },
    PolicyGroupPodCidrList,
    False,
    None))



class PolicyGroupPodCidrListResult(VapiStruct):
    """
    Paginated collection of kubernetes node pod cidrs 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_: 
        :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:`PolicyGroupPodCidrList` or ``None``
        :param results: Paged Collection of kubernetes node pod cidrs 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)


PolicyGroupPodCidrListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_pod_cidr_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__, 'PolicyGroupPodCidrList'))),
    },
    PolicyGroupPodCidrListResult,
    False,
    None))



class PolicyHighPerformanceHostSwitchProfile(VapiStruct):
    """
    Host Switch Profile for High Performance.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyHighPerformanceHostSwitchProfile"
    """
    Identifier denoting this class, when it is used 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_config': 'auto_config',
                            'high_performance_configs': 'high_performance_configs',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'required_capabilities': 'required_capabilities',
                            }

    def __init__(self,
                 auto_config=None,
                 high_performance_configs=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='PolicyHighPerformanceHostSwitchProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 required_capabilities=None,
                ):
        """
        :type  auto_config: :class:`long` or ``None``
        :param auto_config: This property is used to auto configure high performance. This
            could be either 0 or 1. Value of 1 means user do not need to
            provide any other configuration In this case, system will enable
            high performance automatically. Value of 0 means this mode is not
            enabled. In this case, user has to provide high performance
            configurations to enable high performance. format: int32
        :type  high_performance_configs: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param high_performance_configs: List of configurations used in High Performance profile.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`HighPerformanceConfig`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`HighPerformanceConfig`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYUPLINKHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYNIOCPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  required_capabilities: :class:`list` of :class:`str` or ``None``
        :param required_capabilities: 
        """
        self.auto_config = auto_config
        self.high_performance_configs = high_performance_configs
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.required_capabilities = required_capabilities
        VapiStruct.__init__(self)

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

PolicyHighPerformanceHostSwitchProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_high_performance_host_switch_profile', {
        'auto_config': type.OptionalType(type.IntegerType()),
        'high_performance_configs': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'HighPerformanceConfig')]))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'required_capabilities': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyHighPerformanceHostSwitchProfile,
    False,
    None))



class PolicyHostInfraTrafficType(VapiStruct):
    """
    The traffic_name specifies the infrastructure traffic type and it must be
    one of the following system-defined types: FAULT_TOLERANCE is traffic for
    failover and recovery. HBR is traffic for Host based replication. ISCSI is
    traffic for Internet Small Computer System Interface. MANAGEMENT is traffic
    for host management. NFS is traffic related to file transfer in network
    file system. VDP is traffic for vSphere data protection. VIRTUAL_MACHINE is
    traffic generated by virtual machines. VMOTION is traffic for computing
    resource migration. VSAN is traffic generated by virtual storage area
    network. The dynamic_res_pool_name provides a name for the resource pool.
    It can be any arbitrary string. Either traffic_name or
    dynamic_res_pool_name must be set. If both are specified or omitted, an
    error will be returned.

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


    """
    TRAFFIC_NAME_HBR = "HBR"
    """


    """
    TRAFFIC_NAME_ISCSI = "ISCSI"
    """


    """
    TRAFFIC_NAME_MANAGEMENT = "MANAGEMENT"
    """


    """
    TRAFFIC_NAME_NFS = "NFS"
    """


    """
    TRAFFIC_NAME_VDP = "VDP"
    """


    """
    TRAFFIC_NAME_VIRTUAL_MACHINE = "VIRTUAL_MACHINE"
    """


    """
    TRAFFIC_NAME_VMOTION = "VMOTION"
    """


    """
    TRAFFIC_NAME_VSAN = "VSAN"
    """


    """



    _canonical_to_pep_names = {
                            'dynamic_res_pool_name': 'dynamic_res_pool_name',
                            'traffic_name': 'traffic_name',
                            }

    def __init__(self,
                 dynamic_res_pool_name=None,
                 traffic_name=None,
                ):
        """
        :type  dynamic_res_pool_name: :class:`str` or ``None``
        :param dynamic_res_pool_name: Dynamic resource pool traffic name
        :type  traffic_name: :class:`str` or ``None``
        :param traffic_name: Possible values are: 
            
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_FAULT_TOLERANCE`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_HBR`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_ISCSI`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_MANAGEMENT`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_NFS`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_VDP`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_VIRTUAL_MACHINE`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_VMOTION`
            * :attr:`PolicyHostInfraTrafficType.TRAFFIC_NAME_VSAN`
            
            Traffic types
        """
        self.dynamic_res_pool_name = dynamic_res_pool_name
        self.traffic_name = traffic_name
        VapiStruct.__init__(self)


PolicyHostInfraTrafficType._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_host_infra_traffic_type', {
        'dynamic_res_pool_name': type.OptionalType(type.StringType()),
        'traffic_name': type.OptionalType(type.StringType()),
    },
    PolicyHostInfraTrafficType,
    False,
    None))



class PolicyHostSwitchProfilesListResult(VapiStruct):
    """
    HostSwitch Profile 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_: 
        :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: HostSwitch Profile Results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyBaseHostSwitchProfile`. When methods return a value
            of this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyBaseHostSwitchProfile`.
            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)


PolicyHostSwitchProfilesListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_host_switch_profiles_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__, 'PolicyBaseHostSwitchProfile')]))),
    },
    PolicyHostSwitchProfilesListResult,
    False,
    None))



class PolicyHostTransportNodeProfile(VapiStruct):
    """
    Host Transport Node 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'host_switch_spec': 'host_switch_spec',
                            'ignore_overridden_hosts': 'ignore_overridden_hosts',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 host_switch_spec=None,
                 ignore_overridden_hosts=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_switch_spec: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param host_switch_spec: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`HostSwitchSpec`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`HostSwitchSpec`.
        :type  ignore_overridden_hosts: :class:`bool` or ``None``
        :param ignore_overridden_hosts: Host Transport Node Profiles specify the configuration that is
            applied to all hosts in a cluster. The user has the ability to
            update the configuration on individual hosts within a cluster which
            will cause the host configuration to differ from the Host Transport
            Node Profile and results in the host to be marked as overridden. If
            a Host Transport Node Profile is edited or a new Host Transport
            Node Profile is applied on a Host Transport Node Collection, by
            default, the host configuration will be overwritten with the Host
            Transport Node Profile configuration and the overridden flag will
            be reset to false. This flag should be used when hosts that are set
            as overridden should not adopt the Host Transport Node Profile
            configuration when it is being updated or a new one is applied to
            the Host Transport Node Collection. In other words, when this flag
            is set to the default value of false and configuration is applied
            at the cluster level, the configuration will be applied on all
            hosts regardless if overridden or not. When this flag is set to
            true, all hosts that are set as overridden, i.e., have been updated
            invidivually, will be ignored and the cluster-level configuration
            will not be applied. Note, Host Transport Node Profiles can be
            applied on multiple clusters. This field will dictate the behavior
            followed by all clusters using this Host Transport Node 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.host_switch_spec = host_switch_spec
        self.ignore_overridden_hosts = ignore_overridden_hosts
        VapiStruct.__init__(self)


PolicyHostTransportNodeProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_host_transport_node_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_switch_spec': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'HostSwitchSpec')])),
        'ignore_overridden_hosts': type.OptionalType(type.BooleanType()),
    },
    PolicyHostTransportNodeProfile,
    False,
    None))



class PolicyHostTransportNodeProfileListResult(VapiStruct):
    """
    Host Transport Node Profile 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_: 
        :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:`PolicyHostTransportNodeProfile` or ``None``
        :param results: PolicyHostTransportNodeProfile 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.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)


PolicyHostTransportNodeProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_host_transport_node_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__, 'PolicyHostTransportNodeProfile'))),
    },
    PolicyHostTransportNodeProfileListResult,
    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 PolicyIdfwGroupVmDetailListResult(VapiStruct):
    """
    Identity Firewall user login/session data for a single 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',
                            'group_path': 'group_path',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 group_path=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_: 
        :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  group_path: :class:`str` or ``None``
        :param group_path: String Path of the group
        :type  results: :class:`list` of :class:`IdfwVmDetail` or ``None``
        :param results: List of user login/session data for a single VM
        """
        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.group_path = group_path
        self.results = results
        VapiStruct.__init__(self)


PolicyIdfwGroupVmDetailListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_idfw_group_vm_detail_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()),
        'group_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdfwVmDetail'))),
    },
    PolicyIdfwGroupVmDetailListResult,
    False,
    None))



class PolicyIdsEventDataRequest(VapiStruct):
    """
    Filtering parameters to get only a subset of intrusion events.

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



    _canonical_to_pep_names = {
                            'filters': 'filters',
                            }

    def __init__(self,
                 filters=None,
                ):
        """
        :type  filters: :class:`list` of :class:`FilterRequest` or ``None``
        :param filters: An array of filter conditions.
        """
        self.filters = filters
        VapiStruct.__init__(self)


PolicyIdsEventDataRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_event_data_request', {
        'filters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FilterRequest'))),
    },
    PolicyIdsEventDataRequest,
    False,
    None))



class PolicyIdsEventFlowData(VapiStruct):
    """
    IDS event flow data specific to each IDS event. The data includes source
    ip, source port, destination ip, destination port, protocol, rule id,
    profile id, and the action.

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


    """
    ACTION_TYPE_DROP = "DROP"
    """


    """
    ACTION_TYPE_REJECT = "REJECT"
    """


    """
    ACTION_TYPE_INVALID = "INVALID"
    """


    """
    TRAFFIC_TYPE_GATEWAY = "GATEWAY"
    """


    """
    TRAFFIC_TYPE_HOST = "HOST"
    """


    """



    _canonical_to_pep_names = {
                            'action_type': 'action_type',
                            'bytes_toclient': 'bytes_toclient',
                            'bytes_toserver': 'bytes_toserver',
                            'client_ip': 'client_ip',
                            'destination_ip': 'destination_ip',
                            'destination_port': 'destination_port',
                            'gateway': 'gateway',
                            'gateway_tags': 'gateway_tags',
                            'host': 'host',
                            'local_vm_ip': 'local_vm_ip',
                            'profile_id': 'profile_id',
                            'protocol': 'protocol',
                            'rule_id': 'rule_id',
                            'source_ip': 'source_ip',
                            'source_port': 'source_port',
                            'traffic_type': 'traffic_type',
                            }

    def __init__(self,
                 action_type=None,
                 bytes_toclient=None,
                 bytes_toserver=None,
                 client_ip=None,
                 destination_ip=None,
                 destination_port=None,
                 gateway=None,
                 gateway_tags=None,
                 host=None,
                 local_vm_ip=None,
                 profile_id=None,
                 protocol=None,
                 rule_id=None,
                 source_ip=None,
                 source_port=None,
                 traffic_type=None,
                ):
        """
        :type  action_type: :class:`str` or ``None``
        :param action_type: Possible values are: 
            
            * :attr:`PolicyIdsEventFlowData.ACTION_TYPE_ALERT`
            * :attr:`PolicyIdsEventFlowData.ACTION_TYPE_DROP`
            * :attr:`PolicyIdsEventFlowData.ACTION_TYPE_REJECT`
            * :attr:`PolicyIdsEventFlowData.ACTION_TYPE_INVALID`
            
            The action pertaining to the detected intrusion. Possible values
            are ALERT, DROP, REJECT, and INVALID. ALERT - If there is a
            signature match on the packet, it is allowed to pass but a
            notification is sent to the user notifying an intrusion was
            detected. DROP - On a signature match, the packet is silently
            dropped. An alert is sent to the user that an intrusion was
            detected. REJECT - On a signature match, the packet is dropped and
            TCP RST or ICMP error messages (for non-TCP pkts) are sent to the
            endpoints. An alert is sent to the user that an intrusion was
            detected. INVALID - If the action doesn't belong to any of the
            above mentioned categories, it is marked as INVALID.
            This 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_toclient: :class:`long` or ``None``
        :param bytes_toclient: Bytes sent to client. format: int64
            This 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_toserver: :class:`long` or ``None``
        :param bytes_toserver: Bytes sent to server. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  client_ip: :class:`str` or ``None``
        :param client_ip: IP address of the VM that initiated the communication.
            This 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_ip: :class:`str` or ``None``
        :param destination_ip: IP address of the destination VM on the intrusion flow.
            This 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_port: :class:`long` or ``None``
        :param destination_port: Port on the destination VM where the traffic was sent to. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  gateway: :class:`str` or ``None``
        :param gateway: Name of the gateway on which this intrusion was detected.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  gateway_tags: :class:`list` of :class:`Tag` or ``None``
        :param gateway_tags: Tags associated with the gateway on which this intrusion was
            detected.
            This 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: :class:`str` or ``None``
        :param host: Name of the host on which this intrusion was detected.
            This 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_vm_ip: :class:`str` or ``None``
        :param local_vm_ip: IP address of VM on the host where IDS engine is running.
            This 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_id: :class:`str` or ``None``
        :param profile_id: The IDS profile id that is associated with the IDS rule pertaining
            to the intrusion event detected.
            This 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: Traffic protocol pertaining to the detected intrusion, could be
            TCP/UDP etc.
            This 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_id: :class:`long` or ``None``
        :param rule_id: The IDS Rule id pertaining to the detected intrusion. format: int64
            This 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: :class:`str` or ``None``
        :param source_ip: IP address of the source VM on the intrusion flow.
            This 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_port: :class:`long` or ``None``
        :param source_port: Source port through which traffic was initiated that caused the
            intrusion to be detected. format: int64
            This 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_type: :class:`str` or ``None``
        :param traffic_type: Possible values are: 
            
            * :attr:`PolicyIdsEventFlowData.TRAFFIC_TYPE_GATEWAY`
            * :attr:`PolicyIdsEventFlowData.TRAFFIC_TYPE_HOST`
            
            The source where the intrusion was detected. Possible values are
            GATEWAY and 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.
        """
        self.action_type = action_type
        self.bytes_toclient = bytes_toclient
        self.bytes_toserver = bytes_toserver
        self.client_ip = client_ip
        self.destination_ip = destination_ip
        self.destination_port = destination_port
        self.gateway = gateway
        self.gateway_tags = gateway_tags
        self.host = host
        self.local_vm_ip = local_vm_ip
        self.profile_id = profile_id
        self.protocol = protocol
        self.rule_id = rule_id
        self.source_ip = source_ip
        self.source_port = source_port
        self.traffic_type = traffic_type
        VapiStruct.__init__(self)


PolicyIdsEventFlowData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_event_flow_data', {
        'action_type': type.OptionalType(type.StringType()),
        'bytes_toclient': type.OptionalType(type.IntegerType()),
        'bytes_toserver': type.OptionalType(type.IntegerType()),
        'client_ip': type.OptionalType(type.StringType()),
        'destination_ip': type.OptionalType(type.StringType()),
        'destination_port': type.OptionalType(type.IntegerType()),
        'gateway': type.OptionalType(type.StringType()),
        'gateway_tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'host': type.OptionalType(type.StringType()),
        'local_vm_ip': type.OptionalType(type.StringType()),
        'profile_id': type.OptionalType(type.StringType()),
        'protocol': type.OptionalType(type.StringType()),
        'rule_id': type.OptionalType(type.IntegerType()),
        'source_ip': type.OptionalType(type.StringType()),
        'source_port': type.OptionalType(type.IntegerType()),
        'traffic_type': type.OptionalType(type.StringType()),
    },
    PolicyIdsEventFlowData,
    False,
    None))



class PolicyIdsEventsBySignature(VapiStruct):
    """
    Intrusions that are detected, grouped by signature. It contains the
    signature id, severity, name, the number of intrusions of that type and the
    first occurence.

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


    """
    TRAFFIC_TYPE_HOST = "HOST"
    """


    """



    _canonical_to_pep_names = {
                            'count': 'count',
                            'first_occurence': 'first_occurence',
                            'first_occurrence_site': 'first_occurrence_site',
                            'is_ongoing': 'is_ongoing',
                            'project_id': 'project_id',
                            'project_path': 'project_path',
                            'resource_type': 'resource_type',
                            'severity': 'severity',
                            'signature_id': 'signature_id',
                            'signature_name': 'signature_name',
                            'sites_occurred': 'sites_occurred',
                            'traffic_type': 'traffic_type',
                            }

    def __init__(self,
                 count=None,
                 first_occurence=None,
                 first_occurrence_site=None,
                 is_ongoing=None,
                 project_id=None,
                 project_path=None,
                 resource_type=None,
                 severity=None,
                 signature_id=None,
                 signature_name=None,
                 sites_occurred=None,
                 traffic_type=None,
                ):
        """
        :type  count: :class:`long` or ``None``
        :param count: Number of times this particular signature was detected. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  first_occurence: :class:`long` or ``None``
        :param first_occurence: First occurence of the intrusion, 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  first_occurrence_site: :class:`str` or ``None``
        :param first_occurrence_site: The site at which the intrusion first occurred.
            This 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_ongoing: :class:`bool` or ``None``
        :param is_ongoing: Flag indicating an ongoing intrusion.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  project_id: :class:`str` or ``None``
        :param project_id: Project 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  project_path: :class:`str` or ``None``
        :param project_path: Project 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  resource_type: :class:`str` or ``None``
        :param resource_type: IDSEvent resource 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  severity: :class:`str` or ``None``
        :param severity: Severity of the threat covered by the signature, can be Critical,
            High, Medium, or Low.
            This 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_id: :class:`long` or ``None``
        :param signature_id: Signature ID pertaining to the detected intrusion. format: int64
            This 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_name: :class:`str` or ``None``
        :param signature_name: Name of the signature pertaining to the detected intrusion.
            This 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_occurred: :class:`list` of :class:`str` or ``None``
        :param sites_occurred: The sites at which the intrusion occurred.
            This 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_type: :class:`str` or ``None``
        :param traffic_type: Possible values are: 
            
            * :attr:`PolicyIdsEventsBySignature.TRAFFIC_TYPE_GATEWAY`
            * :attr:`PolicyIdsEventsBySignature.TRAFFIC_TYPE_HOST`
            
            The source where the intrusion was detected. Possible values are
            GATEWAY and 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.
        """
        self.count = count
        self.first_occurence = first_occurence
        self.first_occurrence_site = first_occurrence_site
        self.is_ongoing = is_ongoing
        self.project_id = project_id
        self.project_path = project_path
        self.resource_type = resource_type
        self.severity = severity
        self.signature_id = signature_id
        self.signature_name = signature_name
        self.sites_occurred = sites_occurred
        self.traffic_type = traffic_type
        VapiStruct.__init__(self)


PolicyIdsEventsBySignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_events_by_signature', {
        'count': type.OptionalType(type.IntegerType()),
        'first_occurence': type.OptionalType(type.IntegerType()),
        'first_occurrence_site': type.OptionalType(type.StringType()),
        'is_ongoing': type.OptionalType(type.BooleanType()),
        'project_id': type.OptionalType(type.StringType()),
        'project_path': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'severity': type.OptionalType(type.StringType()),
        'signature_id': type.OptionalType(type.IntegerType()),
        'signature_name': type.OptionalType(type.StringType()),
        'sites_occurred': type.OptionalType(type.ListType(type.StringType())),
        'traffic_type': type.OptionalType(type.StringType()),
    },
    PolicyIdsEventsBySignature,
    False,
    None))



class PolicyIdsEventsBySignatureResult(VapiStruct):
    """
    List of all intrusions that are detected grouped by signature, it contains
    minimal details about the intrusions.

    .. 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_: 
        :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:`PolicyIdsEventsBySignature` or ``None``
        :param results: List of all intrusions detected, grouped by signature. The details
            include signature id, name, severity, timestamp, and total number
            of attempts per signature.
            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)


PolicyIdsEventsBySignatureResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_events_by_signature_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__, 'PolicyIdsEventsBySignature'))),
    },
    PolicyIdsEventsBySignatureResult,
    False,
    None))



class PolicyIdsEventsSummary(VapiStruct):
    """
    Intrusion event with all the event and signature details, each event
    contains the signature id, name, severity, first and recent occurence,
    users and VMs affected and other signature metadata.

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



    _canonical_to_pep_names = {
                            'affected_ip_count': 'affected_ip_count',
                            'affected_vm_count': 'affected_vm_count',
                            'first_occurence': 'first_occurence',
                            'ids_flow_details': 'ids_flow_details',
                            'is_ongoing': 'is_ongoing',
                            'is_rule_valid': 'is_rule_valid',
                            'latest_occurence': 'latest_occurence',
                            'pcap_id': 'pcap_id',
                            'project_id': 'project_id',
                            'project_path': 'project_path',
                            'resource_type': 'resource_type',
                            'rule_id': 'rule_id',
                            'signature_id': 'signature_id',
                            'signature_metadata': 'signature_metadata',
                            'site_id': 'site_id',
                            'total_count': 'total_count',
                            'user_details': 'user_details',
                            'vm_details': 'vm_details',
                            }

    def __init__(self,
                 affected_ip_count=None,
                 affected_vm_count=None,
                 first_occurence=None,
                 ids_flow_details=None,
                 is_ongoing=None,
                 is_rule_valid=None,
                 latest_occurence=None,
                 pcap_id=None,
                 project_id=None,
                 project_path=None,
                 resource_type=None,
                 rule_id=None,
                 signature_id=None,
                 signature_metadata=None,
                 site_id=None,
                 total_count=None,
                 user_details=None,
                 vm_details=None,
                ):
        """
        :type  affected_ip_count: :class:`long` or ``None``
        :param affected_ip_count: Count of workload IPs on which a particular signature was detected.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  affected_vm_count: :class:`long` or ``None``
        :param affected_vm_count: Count of VMs on which a particular signature was detected. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  first_occurence: :class:`long` or ``None``
        :param first_occurence: First occurence of the intrusion, 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  ids_flow_details: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ids_flow_details: IDS event flow data specific to each IDS event. The data includes
            source ip, source port, destination ip, destination port, and
            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  is_ongoing: :class:`bool` or ``None``
        :param is_ongoing: Flag indicating an ongoing intrusion.
            This 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_rule_valid: :class:`bool` or ``None``
        :param is_rule_valid: Indicates if the rule id is valid 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  latest_occurence: :class:`long` or ``None``
        :param latest_occurence: Latest occurence of the intrusion, 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  pcap_id: :class:`str` or ``None``
        :param pcap_id: ID of the packet-capture associated with an event.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  project_id: :class:`str` or ``None``
        :param project_id: Project 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  project_path: :class:`str` or ``None``
        :param project_path: Project 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  resource_type: :class:`str` or ``None``
        :param resource_type: IDSEvent resource 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  rule_id: :class:`long` or ``None``
        :param rule_id: The IDS Rule id that detected this particular intrusion. format:
            int64
            This 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_id: :class:`long` or ``None``
        :param signature_id: Signature ID pertaining to the detected intrusion. format: int64
            This 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_metadata: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param signature_metadata: Metadata about the detected signature including name, id, severity,
            product affected, protocol etc.
            This 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 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  total_count: :class:`long` or ``None``
        :param total_count: Number of times this particular signature was detected. format:
            int64
            This 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_details: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param user_details: List of users logged into VMs on which a particular signature was
            detected.
            This 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_details: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param vm_details: List of VMs on which a particular signature was detected with the
            count.
            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.affected_ip_count = affected_ip_count
        self.affected_vm_count = affected_vm_count
        self.first_occurence = first_occurence
        self.ids_flow_details = ids_flow_details
        self.is_ongoing = is_ongoing
        self.is_rule_valid = is_rule_valid
        self.latest_occurence = latest_occurence
        self.pcap_id = pcap_id
        self.project_id = project_id
        self.project_path = project_path
        self.resource_type = resource_type
        self.rule_id = rule_id
        self.signature_id = signature_id
        self.signature_metadata = signature_metadata
        self.site_id = site_id
        self.total_count = total_count
        self.user_details = user_details
        self.vm_details = vm_details
        VapiStruct.__init__(self)


PolicyIdsEventsSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_events_summary', {
        'affected_ip_count': type.OptionalType(type.IntegerType()),
        'affected_vm_count': type.OptionalType(type.IntegerType()),
        'first_occurence': type.OptionalType(type.IntegerType()),
        'ids_flow_details': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'is_ongoing': type.OptionalType(type.BooleanType()),
        'is_rule_valid': type.OptionalType(type.BooleanType()),
        'latest_occurence': type.OptionalType(type.IntegerType()),
        'pcap_id': type.OptionalType(type.StringType()),
        'project_id': type.OptionalType(type.StringType()),
        'project_path': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'rule_id': type.OptionalType(type.IntegerType()),
        'signature_id': type.OptionalType(type.IntegerType()),
        'signature_metadata': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'site_id': type.OptionalType(type.StringType()),
        'total_count': type.OptionalType(type.IntegerType()),
        'user_details': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'vm_details': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
    },
    PolicyIdsEventsSummary,
    False,
    None))



class PolicyIdsIpList(VapiStruct):
    """
    List of all affected IP addresses pertaining to a specific signature for
    intrusion events seen on edge.

    .. 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_: 
        :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: List of all affected IP addresses specific to a particular
            signature. 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.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyIdsIpList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_ip_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.StringType())),
    },
    PolicyIdsIpList,
    False,
    None))



class PolicyIdsSummaryListResult(VapiStruct):
    """
    List of all intrusions that are detected grouped by signature with their
    summary.

    .. 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_: 
        :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:`PolicyIdsEventsSummary` or ``None``
        :param results: Paged collection of the detected intrusions.
            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)


PolicyIdsSummaryListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_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__, 'PolicyIdsEventsSummary'))),
    },
    PolicyIdsSummaryListResult,
    False,
    None))



class PolicyIdsUserList(VapiStruct):
    """
    List of all affected users pertaining to a specific signature.

    .. 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_: 
        :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: List of all affected users specific to a particular signature.
            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)


PolicyIdsUserList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_user_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.StringType())),
    },
    PolicyIdsUserList,
    False,
    None))



class PolicyIdsUserStats(VapiStruct):
    """
    List of Users logged into VMs where intrusions of a given signature were
    detected.

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



    _canonical_to_pep_names = {
                            'count': 'count',
                            'user_list': 'user_list',
                            }

    def __init__(self,
                 count=None,
                 user_list=None,
                ):
        """
        :type  count: :class:`long` or ``None``
        :param count: Number of unique users logged into VMs on which a particular
            signature was detected. format: int64
            This 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_list: :class:`list` of :class:`str` or ``None``
        :param user_list: List of users logged into VMs on which a particular signature was
            detected.
            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.count = count
        self.user_list = user_list
        VapiStruct.__init__(self)


PolicyIdsUserStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_user_stats', {
        'count': type.OptionalType(type.IntegerType()),
        'user_list': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyIdsUserStats,
    False,
    None))



class PolicyIdsVmList(VapiStruct):
    """
    List of all affected VMs pertaining to a specific signature for intrusion
    events seen on host.

    .. 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_: 
        :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: List of all affected VMs specific to a particular signature.
            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)


PolicyIdsVmList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_vm_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.StringType())),
    },
    PolicyIdsVmList,
    False,
    None))



class PolicyIdsVmStats(VapiStruct):
    """
    List of VMs on which a particular signature was detected with the count.

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



    _canonical_to_pep_names = {
                            'count': 'count',
                            'vm_list': 'vm_list',
                            }

    def __init__(self,
                 count=None,
                 vm_list=None,
                ):
        """
        :type  count: :class:`long` or ``None``
        :param count: Number of unique VMs on which a particular signature was detected.
            format: int64
            This 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_list: :class:`list` of :class:`str` or ``None``
        :param vm_list: List of VM names on which intrusions of that particular signature
            type were detected.
            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.count = count
        self.vm_list = vm_list
        VapiStruct.__init__(self)


PolicyIdsVmStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ids_vm_stats', {
        'count': type.OptionalType(type.IntegerType()),
        'vm_list': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyIdsVmStats,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PolicyInterVrfRoutingConfig(VapiStruct):
    """
    policy inter-vrf routing config.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bgp_route_leaking': 'bgp_route_leaking',
                            'static_route_advertisement': 'static_route_advertisement',
                            'target_path': 'target_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bgp_route_leaking=None,
                 static_route_advertisement=None,
                 target_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  bgp_route_leaking: :class:`list` of :class:`BgpRouteLeaking` or ``None``
        :param bgp_route_leaking: Import / export BGP routes.
        :type  static_route_advertisement: :class:`PolicyStaticRouteAdvertisement` or ``None``
        :param static_route_advertisement: 
        :type  target_path: :class:`str` or ``None``
        :param target_path: Policy path to tier0/vrf belongs to the same parent 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.bgp_route_leaking = bgp_route_leaking
        self.static_route_advertisement = static_route_advertisement
        self.target_path = target_path
        VapiStruct.__init__(self)


PolicyInterVrfRoutingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_inter_vrf_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'bgp_route_leaking': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BgpRouteLeaking'))),
        'static_route_advertisement': type.OptionalType(type.ReferenceType(__name__, 'PolicyStaticRouteAdvertisement')),
        'target_path': type.OptionalType(type.StringType()),
    },
    PolicyInterVrfRoutingConfig,
    False,
    None))



class PolicyInterVrfRoutingConfigListResult(VapiStruct):
    """
    Collection of inter-vrf 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_',
                            '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_: 
        :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:`PolicyInterVrfRoutingConfig` or ``None``
        :param results: inter-vrf routing 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)


PolicyInterVrfRoutingConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_inter_vrf_routing_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__, 'PolicyInterVrfRoutingConfig'))),
    },
    PolicyInterVrfRoutingConfigListResult,
    False,
    None))



class PolicyInterfaceGroupStatistics(VapiStruct):
    """
    Tier0 or Tier1 interface group statistics on specific Enforcement Point.

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



    _canonical_to_pep_names = {
                            'members': 'members',
                            'summary': 'summary',
                            }

    def __init__(self,
                 members=None,
                 summary=None,
                ):
        """
        :type  members: :class:`list` of :class:`LogicalRouterPortStatistics` or ``None``
        :param members: Tier0 or Tier1 interface statistics on specific 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  summary: :class:`AggregatedLogicalRouterPortCounters` or ``None``
        :param summary: 
        """
        self.members = members
        self.summary = summary
        VapiStruct.__init__(self)


PolicyInterfaceGroupStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_interface_group_statistics', {
        'members': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LogicalRouterPortStatistics'))),
        'summary': type.OptionalType(type.ReferenceType(__name__, 'AggregatedLogicalRouterPortCounters')),
    },
    PolicyInterfaceGroupStatistics,
    False,
    None))



class PolicyInterfaceOspfConfig(VapiStruct):
    """
    OSPF Interface configuration.

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


    """
    NETWORK_TYPE_P2P = "P2P"
    """


    """



    _canonical_to_pep_names = {
                            'bfd_path': 'bfd_path',
                            'dead_interval': 'dead_interval',
                            'enable_bfd': 'enable_bfd',
                            'enabled': 'enabled',
                            'hello_interval': 'hello_interval',
                            'network_type': 'network_type',
                            'ospf_area': 'ospf_area',
                            }

    def __init__(self,
                 bfd_path=None,
                 dead_interval=None,
                 enable_bfd=None,
                 enabled=None,
                 hello_interval=None,
                 network_type=None,
                 ospf_area=None,
                ):
        """
        :type  bfd_path: :class:`str` or ``None``
        :param bfd_path: This filed is valid only if enable_bfd is set to TRUE. If
            enable_bfd flag is set to TRUE, this profile will be applied to all
            OSPF peers in this interface. If this field is empty, bfd_path will
            refer to Tier-0 global BFD profile.
        :type  dead_interval: :class:`long` or ``None``
        :param dead_interval: Specifies the number of seconds that router must wait before it
            declares a OSPF neighbor router down because it has not received
            OSPF hello packet. OSPF dead interval should be minimum 3 times
            greater than the hello interval format: int32
        :type  enable_bfd: :class:`bool` or ``None``
        :param enable_bfd: Enable/Disable OSPF to register for BFD event. Use FALSE to disable
            BFD.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: enable/disable OSPF on the interface. If enabled flag not
            specified, defailt is enable OSPF.
        :type  hello_interval: :class:`long` or ``None``
        :param hello_interval: Specifies the interval between the hello packets that OSPF sends on
            this interface. OSPF hello interval should be less than the dead
            interval format: int32
        :type  network_type: :class:`str` or ``None``
        :param network_type: Possible values are: 
            
            * :attr:`PolicyInterfaceOspfConfig.NETWORK_TYPE_BROADCAST`
            * :attr:`PolicyInterfaceOspfConfig.NETWORK_TYPE_P2P`
            
            Configure OSPF networkt type, default is BROADCAST network type
        :type  ospf_area: :class:`str` or ``None``
        :param ospf_area: Attache Tier0 Interface to specified OSPF Area. all peers.
        """
        self.bfd_path = bfd_path
        self.dead_interval = dead_interval
        self.enable_bfd = enable_bfd
        self.enabled = enabled
        self.hello_interval = hello_interval
        self.network_type = network_type
        self.ospf_area = ospf_area
        VapiStruct.__init__(self)


PolicyInterfaceOspfConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_interface_ospf_config', {
        'bfd_path': type.OptionalType(type.StringType()),
        'dead_interval': type.OptionalType(type.IntegerType()),
        'enable_bfd': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'hello_interval': type.OptionalType(type.IntegerType()),
        'network_type': type.OptionalType(type.StringType()),
        'ospf_area': type.OptionalType(type.StringType()),
    },
    PolicyInterfaceOspfConfig,
    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 PolicyIpsecVpnIkeServiceSummary(VapiStruct):
    """
    Summarized view of all IPSec VPN sessions for a specified service.

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



    _canonical_to_pep_names = {
                            'aggregate_traffic_counters': 'aggregate_traffic_counters',
                            'last_update_timestamp': 'last_update_timestamp',
                            'session_summary': 'session_summary',
                            'traffic_summary_per_session': 'traffic_summary_per_session',
                            'display_name': 'display_name',
                            'enforcement_point_path': 'enforcement_point_path',
                            'ipsec_vpn_service_path': 'ipsec_vpn_service_path',
                            }

    def __init__(self,
                 aggregate_traffic_counters=None,
                 last_update_timestamp=None,
                 session_summary=None,
                 traffic_summary_per_session=None,
                 display_name=None,
                 enforcement_point_path=None,
                 ipsec_vpn_service_path=None,
                ):
        """
        :type  aggregate_traffic_counters: :class:`IPSecVPNTrafficCounters` or ``None``
        :param aggregate_traffic_counters: 
        :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  session_summary: :class:`IPsecVPNIKESessionSummary` or ``None``
        :param session_summary: 
        :type  traffic_summary_per_session: :class:`list` of :class:`IPSecVPNSessionTrafficSummary` or ``None``
        :param traffic_summary_per_session: Traffic summary per session.
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display name of IPSec VPN 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  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the Primary site's enforcement point where
            the info is fetched. This is applicable only on a GlobalManager.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipsec_vpn_service_path: :class:`str` or ``None``
        :param ipsec_vpn_service_path: Policy path of IPSec VPN 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.aggregate_traffic_counters = aggregate_traffic_counters
        self.last_update_timestamp = last_update_timestamp
        self.session_summary = session_summary
        self.traffic_summary_per_session = traffic_summary_per_session
        self.display_name = display_name
        self.enforcement_point_path = enforcement_point_path
        self.ipsec_vpn_service_path = ipsec_vpn_service_path
        VapiStruct.__init__(self)


PolicyIpsecVpnIkeServiceSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ipsec_vpn_ike_service_summary', {
        'aggregate_traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVPNTrafficCounters')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'session_summary': type.OptionalType(type.ReferenceType(__name__, 'IPsecVPNIKESessionSummary')),
        'traffic_summary_per_session': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVPNSessionTrafficSummary'))),
        'display_name': type.OptionalType(type.StringType()),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'ipsec_vpn_service_path': type.OptionalType(type.StringType()),
    },
    PolicyIpsecVpnIkeServiceSummary,
    False,
    None))



class PolicyIpsecVpnSessionSummary(VapiStruct):
    """
    Summarized view of all selected IPSec VPN sessions.

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



    _canonical_to_pep_names = {
                            'aggregate_traffic_counters': 'aggregate_traffic_counters',
                            'last_update_timestamp': 'last_update_timestamp',
                            'session_summary': 'session_summary',
                            'traffic_summary_per_session': 'traffic_summary_per_session',
                            }

    def __init__(self,
                 aggregate_traffic_counters=None,
                 last_update_timestamp=None,
                 session_summary=None,
                 traffic_summary_per_session=None,
                ):
        """
        :type  aggregate_traffic_counters: :class:`IPSecVPNTrafficCounters` or ``None``
        :param aggregate_traffic_counters: 
        :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  session_summary: :class:`IPsecVPNIKESessionSummary` or ``None``
        :param session_summary: 
        :type  traffic_summary_per_session: :class:`list` of :class:`IPSecVPNSessionTrafficSummary` or ``None``
        :param traffic_summary_per_session: Traffic summary per session.
        """
        self.aggregate_traffic_counters = aggregate_traffic_counters
        self.last_update_timestamp = last_update_timestamp
        self.session_summary = session_summary
        self.traffic_summary_per_session = traffic_summary_per_session
        VapiStruct.__init__(self)


PolicyIpsecVpnSessionSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ipsec_vpn_session_summary', {
        'aggregate_traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVPNTrafficCounters')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'session_summary': type.OptionalType(type.ReferenceType(__name__, 'IPsecVPNIKESessionSummary')),
        'traffic_summary_per_session': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVPNSessionTrafficSummary'))),
    },
    PolicyIpsecVpnSessionSummary,
    False,
    None))



class PolicyKubernetesGateway(VapiStruct):
    """
    Kubernetes gateway details

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



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            'gateway_ip_addresses': 'gateway_ip_addresses',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 gateway_ip_addresses=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  gateway_ip_addresses: :class:`list` of :class:`str` or ``None``
        :param gateway_ip_addresses: The ip addresses of kubernetes gateway resource
        """
        self.display_name = display_name
        self.external_id = external_id
        self.gateway_ip_addresses = gateway_ip_addresses
        VapiStruct.__init__(self)


PolicyKubernetesGateway._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_gateway', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'gateway_ip_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyKubernetesGateway,
    False,
    None))



class PolicyKubernetesIngress(VapiStruct):
    """
    kubernetes ingress details

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



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            'load_balance_ingress_ip_addresses': 'load_balance_ingress_ip_addresses',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 load_balance_ingress_ip_addresses=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            This 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_balance_ingress_ip_addresses: :class:`list` of :class:`str` or ``None``
        :param load_balance_ingress_ip_addresses: The load balance ingress ip addresses of kubernetes ingress
            resource
        """
        self.display_name = display_name
        self.external_id = external_id
        self.load_balance_ingress_ip_addresses = load_balance_ingress_ip_addresses
        VapiStruct.__init__(self)


PolicyKubernetesIngress._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_ingress', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'load_balance_ingress_ip_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyKubernetesIngress,
    False,
    None))



class PolicyKubernetesNode(VapiStruct):
    """
    kubernetes node resource details

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



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            'ip_addresses': 'ip_addresses',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 ip_addresses=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            This 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: The ip addresses of kubernetes node resource
        """
        self.display_name = display_name
        self.external_id = external_id
        self.ip_addresses = ip_addresses
        VapiStruct.__init__(self)


PolicyKubernetesNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_node', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyKubernetesNode,
    False,
    None))



class PolicyKubernetesNodePodCidr(VapiStruct):
    """
    kubernetes node resource details

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



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            'pod_cidrs': 'pod_cidrs',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 pod_cidrs=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pod_cidrs: :class:`list` of :class:`str` or ``None``
        :param pod_cidrs: The pod cidrs of kubernetes node resource
        """
        self.display_name = display_name
        self.external_id = external_id
        self.pod_cidrs = pod_cidrs
        VapiStruct.__init__(self)


PolicyKubernetesNodePodCidr._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_node_pod_cidr', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'pod_cidrs': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyKubernetesNodePodCidr,
    False,
    None))



class PolicyKubernetesResource(VapiStruct):
    """
    Details of the kubernetes resource 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',
                            'external_id': 'external_id',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            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.external_id = external_id
        VapiStruct.__init__(self)


PolicyKubernetesResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_resource', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
    },
    PolicyKubernetesResource,
    False,
    None))



class PolicyKubernetesService(VapiStruct):
    """
    Kubernetes service resource details

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



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'external_id': 'external_id',
                            'cluster_ips': 'cluster_ips',
                            'load_balance_ingresses': 'load_balance_ingresses',
                            'node_port_local_endpoints': 'node_port_local_endpoints',
                            'type': 'type',
                            }

    def __init__(self,
                 display_name=None,
                 external_id=None,
                 cluster_ips=None,
                 load_balance_ingresses=None,
                 node_port_local_endpoints=None,
                 type=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The name of kubernetes resource
            This 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: The id of kubernetes resource
            This 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_ips: :class:`list` of :class:`str` or ``None``
        :param cluster_ips: The cluster ip addresses of kubernetes service resource
        :type  load_balance_ingresses: :class:`list` of :class:`PolicyKubernetesServiceLoadBalancerIngress` or ``None``
        :param load_balance_ingresses: The load balance ingress of kubernetes service resource
        :type  node_port_local_endpoints: :class:`list` of :class:`PolicyKubernetesServiceNodePortLocalEndpoint` or ``None``
        :param node_port_local_endpoints: The node port local endpoints of kubernetes service resource
        :type  type: :class:`str` or ``None``
        :param type: The type of kubernetes service resource
            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.external_id = external_id
        self.cluster_ips = cluster_ips
        self.load_balance_ingresses = load_balance_ingresses
        self.node_port_local_endpoints = node_port_local_endpoints
        self.type = type
        VapiStruct.__init__(self)


PolicyKubernetesService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_service', {
        'display_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'cluster_ips': type.OptionalType(type.ListType(type.StringType())),
        'load_balance_ingresses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesServiceLoadBalancerIngress'))),
        'node_port_local_endpoints': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesServiceNodePortLocalEndpoint'))),
        'type': type.OptionalType(type.StringType()),
    },
    PolicyKubernetesService,
    False,
    None))



class PolicyKubernetesServiceLoadBalancerIngress(VapiStruct):
    """
    Kubernetes service Load Balance Ingress details

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



    _canonical_to_pep_names = {
                            'hostname': 'hostname',
                            'load_balancer_ingress_ip': 'load_balancer_ingress_ip',
                            'ports': 'ports',
                            }

    def __init__(self,
                 hostname=None,
                 load_balancer_ingress_ip=None,
                 ports=None,
                ):
        """
        :type  hostname: :class:`str` or ``None``
        :param hostname: Hostname is set for load-balancer ingress points that are DNS
            based.
        :type  load_balancer_ingress_ip: :class:`str` or ``None``
        :param load_balancer_ingress_ip: The load balancer ingress ip of kubernetes service resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ports: :class:`list` of :class:`PolicyKubernetesServiceLoadBalancerIngressPortStatus` or ``None``
        :param ports: Ports is a list of records of service points.
        """
        self.hostname = hostname
        self.load_balancer_ingress_ip = load_balancer_ingress_ip
        self.ports = ports
        VapiStruct.__init__(self)


PolicyKubernetesServiceLoadBalancerIngress._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_service_load_balancer_ingress', {
        'hostname': type.OptionalType(type.StringType()),
        'load_balancer_ingress_ip': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyKubernetesServiceLoadBalancerIngressPortStatus'))),
    },
    PolicyKubernetesServiceLoadBalancerIngress,
    False,
    None))



class PolicyKubernetesServiceLoadBalancerIngressPortStatus(VapiStruct):
    """
    It represents the condition of a service point.

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


    """
    PROTOCOL_UDP = "UDP"
    """


    """
    PROTOCOL_SCTP = "SCTP"
    """


    """



    _canonical_to_pep_names = {
                            'port': 'port',
                            'protocol': 'protocol',
                            }

    def __init__(self,
                 port=None,
                 protocol=None,
                ):
        """
        :type  port: :class:`long` or ``None``
        :param port: Specifies port of service point. format: int64
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            *
              :attr:`PolicyKubernetesServiceLoadBalancerIngressPortStatus.PROTOCOL_TCP`
            *
              :attr:`PolicyKubernetesServiceLoadBalancerIngressPortStatus.PROTOCOL_UDP`
            *
              :attr:`PolicyKubernetesServiceLoadBalancerIngressPortStatus.PROTOCOL_SCTP`
            
            Specifies protocol of service point. e.g. TCP, UDP, SCTP.
        """
        self.port = port
        self.protocol = protocol
        VapiStruct.__init__(self)


PolicyKubernetesServiceLoadBalancerIngressPortStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_service_load_balancer_ingress_port_status', {
        'port': type.OptionalType(type.IntegerType()),
        'protocol': type.OptionalType(type.StringType()),
    },
    PolicyKubernetesServiceLoadBalancerIngressPortStatus,
    False,
    None))



class PolicyKubernetesServiceNodePortLocalEndpoint(VapiStruct):
    """
    Kubernetes service node port local endpoint details

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


    """
    PROTOCOL_UDP = "UDP"
    """


    """
    PROTOCOL_SCTP = "SCTP"
    """


    """



    _canonical_to_pep_names = {
                            'node_ip': 'node_ip',
                            'node_port': 'node_port',
                            'protocol': 'protocol',
                            }

    def __init__(self,
                 node_ip=None,
                 node_port=None,
                 protocol=None,
                ):
        """
        :type  node_ip: :class:`str` or ``None``
        :param node_ip: The node ip of kubernetes service resource
            This 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_port: :class:`str` or ``None``
        :param node_port: The node port of kubernetes service resource
            This 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:`PolicyKubernetesServiceNodePortLocalEndpoint.PROTOCOL_TCP`
            * :attr:`PolicyKubernetesServiceNodePortLocalEndpoint.PROTOCOL_UDP`
            *
              :attr:`PolicyKubernetesServiceNodePortLocalEndpoint.PROTOCOL_SCTP`
            
            Protocol of endpoint
        """
        self.node_ip = node_ip
        self.node_port = node_port
        self.protocol = protocol
        VapiStruct.__init__(self)


PolicyKubernetesServiceNodePortLocalEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_kubernetes_service_node_port_local_endpoint', {
        'node_ip': type.OptionalType(type.StringType()),
        'node_port': type.OptionalType(type.StringType()),
        'protocol': type.OptionalType(type.StringType()),
    },
    PolicyKubernetesServiceNodePortLocalEndpoint,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PolicyLatencyStatProfile(VapiStruct):
    """
    Latency stat service 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'applied_to_group_path': 'applied_to_group_path',
                            'pnic_latency_enabled': 'pnic_latency_enabled',
                            'sampling_interval': 'sampling_interval',
                            'sampling_rate': 'sampling_rate',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 applied_to_group_path=None,
                 pnic_latency_enabled=None,
                 sampling_interval=None,
                 sampling_rate=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  applied_to_group_path: :class:`str` or ``None``
        :param applied_to_group_path: The Policy group path to apply the latency profile.
        :type  pnic_latency_enabled: :class:`bool` or ``None``
        :param pnic_latency_enabled: Activate or Deactivate pnic latency.
        :type  sampling_interval: :class:`long` or ``None``
        :param sampling_interval: Event nth milliseconds packet is sampled. When a value less than
            1000 is given, the realized sampling interval will be 1000
            milliseconds. format: int64
        :type  sampling_rate: :class:`long` or ``None``
        :param sampling_rate: Event nth packet is sampled. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.applied_to_group_path = applied_to_group_path
        self.pnic_latency_enabled = pnic_latency_enabled
        self.sampling_interval = sampling_interval
        self.sampling_rate = sampling_rate
        VapiStruct.__init__(self)


PolicyLatencyStatProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_latency_stat_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'applied_to_group_path': type.OptionalType(type.StringType()),
        'pnic_latency_enabled': type.OptionalType(type.BooleanType()),
        'sampling_interval': type.OptionalType(type.IntegerType()),
        'sampling_rate': type.OptionalType(type.IntegerType()),
    },
    PolicyLatencyStatProfile,
    False,
    None))



class PolicyLatencyStatProfileListResult(VapiStruct):
    """
    List of latency 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_: 
        :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:`PolicyLatencyStatProfile` or ``None``
        :param results: Latency stat profile 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)


PolicyLatencyStatProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_latency_stat_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__, 'PolicyLatencyStatProfile'))),
    },
    PolicyLatencyStatProfileListResult,
    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_: 
        :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 PolicyLiveTraceActionConfig(VapiStruct):
    """
    Livetrace action configuration

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



    _canonical_to_pep_names = {
                            'counter_config': 'counter_config',
                            'datapath_stats_config': 'datapath_stats_config',
                            'pktcap_config': 'pktcap_config',
                            'trace_config': 'trace_config',
                            }

    def __init__(self,
                 counter_config=None,
                 datapath_stats_config=None,
                 pktcap_config=None,
                 trace_config=None,
                ):
        """
        :type  counter_config: :class:`LiveTracePacketGranularActionConfig` or ``None``
        :param counter_config: 
        :type  datapath_stats_config: :class:`LiveTracePacketGranularActionConfig` or ``None``
        :param datapath_stats_config: 
        :type  pktcap_config: :class:`LiveTracePacketGranularActionConfig` or ``None``
        :param pktcap_config: 
        :type  trace_config: :class:`LiveTracePacketGranularActionConfig` or ``None``
        :param trace_config: 
        """
        self.counter_config = counter_config
        self.datapath_stats_config = datapath_stats_config
        self.pktcap_config = pktcap_config
        self.trace_config = trace_config
        VapiStruct.__init__(self)


PolicyLiveTraceActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_live_trace_action_config', {
        'counter_config': type.OptionalType(type.ReferenceType(__name__, 'LiveTracePacketGranularActionConfig')),
        'datapath_stats_config': type.OptionalType(type.ReferenceType(__name__, 'LiveTracePacketGranularActionConfig')),
        'pktcap_config': type.OptionalType(type.ReferenceType(__name__, 'LiveTracePacketGranularActionConfig')),
        'trace_config': type.OptionalType(type.ReferenceType(__name__, 'LiveTracePacketGranularActionConfig')),
    },
    PolicyLiveTraceActionConfig,
    False,
    None))



class PolicyLiveTraceIpsecVpnConfig(VapiStruct):
    """
    Information for deriving virtual tunnel interface (VTI) of Route-based
    IPSec VPN session.

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



    _canonical_to_pep_names = {
                            'session_path': 'session_path',
                            }

    def __init__(self,
                 session_path=None,
                ):
        """
        :type  session_path: :class:`str` or ``None``
        :param session_path: Policy path of VPN session.
        """
        self.session_path = session_path
        VapiStruct.__init__(self)


PolicyLiveTraceIpsecVpnConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_live_trace_ipsec_vpn_config', {
        'session_path': type.OptionalType(type.StringType()),
    },
    PolicyLiveTraceIpsecVpnConfig,
    False,
    None))



class PolicyLldpHostSwitchProfile(VapiStruct):
    """
    Host Switch for LLDP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyLldpHostSwitchProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'send_enabled': 'send_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'required_capabilities': 'required_capabilities',
                            }

    def __init__(self,
                 send_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='PolicyLldpHostSwitchProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 required_capabilities=None,
                ):
        """
        :type  send_enabled: :class:`bool` or ``None``
        :param send_enabled: Enabled or disabled sending LLDP packets
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYUPLINKHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYNIOCPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  required_capabilities: :class:`list` of :class:`str` or ``None``
        :param required_capabilities: 
        """
        self.send_enabled = send_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.required_capabilities = required_capabilities
        VapiStruct.__init__(self)

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

PolicyLldpHostSwitchProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_lldp_host_switch_profile', {
        'send_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'required_capabilities': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyLldpHostSwitchProfile,
    False,
    None))



class PolicyMetadataProxyStatistics(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'metadata_proxy_path': 'metadata_proxy_path',
                            'statistics': 'statistics',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 metadata_proxy_path=None,
                 statistics=None,
                 timestamp=None,
                ):
        """
        :type  metadata_proxy_path: :class:`str` or ``None``
        :param metadata_proxy_path: Policy path of metadata proxy configuration
        :type  statistics: :class:`list` of :class:`MetadataProxyStatisticsPerSegment` or ``None``
        :param statistics: Metadata Proxy statistics per segment
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: timestamp of the statistics format: int64
        """
        self.metadata_proxy_path = metadata_proxy_path
        self.statistics = statistics
        self.timestamp = timestamp
        VapiStruct.__init__(self)


PolicyMetadataProxyStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_metadata_proxy_statistics', {
        'metadata_proxy_path': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MetadataProxyStatisticsPerSegment'))),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    PolicyMetadataProxyStatistics,
    False,
    None))



class PolicyMetadataProxyStatus(VapiStruct):
    """


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


    """
    PROXY_STATUS_DOWN = "DOWN"
    """


    """
    PROXY_STATUS_ERROR = "ERROR"
    """


    """
    PROXY_STATUS_NO_BACKUP = "NO_BACKUP"
    """


    """



    _canonical_to_pep_names = {
                            'error_message': 'error_message',
                            'proxy_status': 'proxy_status',
                            'transport_nodes': 'transport_nodes',
                            }

    def __init__(self,
                 error_message=None,
                 proxy_status=None,
                 transport_nodes=None,
                ):
        """
        :type  error_message: :class:`str` or ``None``
        :param error_message: Error message, if available
        :type  proxy_status: :class:`str` or ``None``
        :param proxy_status: Possible values are: 
            
            * :attr:`PolicyMetadataProxyStatus.PROXY_STATUS_UP`
            * :attr:`PolicyMetadataProxyStatus.PROXY_STATUS_DOWN`
            * :attr:`PolicyMetadataProxyStatus.PROXY_STATUS_ERROR`
            * :attr:`PolicyMetadataProxyStatus.PROXY_STATUS_NO_BACKUP`
            
            UP means the metadata proxy is working fine on both
            transport-nodes(if configured); DOWN means the metadata proxy is is
            down on both transport-nodes(if configured), hence the metadata
            proxy will not repsond to any metadata request; Error means there
            is an error on transport-node(s) or no status is reported from
            transport-node(s). The metadata proxy may be working (or not
            working); NO_BACK means metadata proxy is working on one of the
            transport node while not in the other transport-node (if
            configured). If the metadata proxy on the working transport-node
            goes down, the metadata proxy will go down.
        :type  transport_nodes: :class:`list` of :class:`str` or ``None``
        :param transport_nodes: Order of the transport nodes is insensitive because Metadata Proxy
            is running in Active-Active mode among target transport nodes.
        """
        self.error_message = error_message
        self.proxy_status = proxy_status
        self.transport_nodes = transport_nodes
        VapiStruct.__init__(self)


PolicyMetadataProxyStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_metadata_proxy_status', {
        'error_message': type.OptionalType(type.StringType()),
        'proxy_status': type.OptionalType(type.StringType()),
        'transport_nodes': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyMetadataProxyStatus,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Activate/deactivate 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'gateway_path': 'gateway_path',
                            'mcast_forwarding_per_edge': 'mcast_forwarding_per_edge',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 gateway_path=None,
                 mcast_forwarding_per_edge=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 or Tier1 gateway.
        :type  mcast_forwarding_per_edge: :class:`list` of :class:`MulticastForwardingPerEdge` or ``None``
        :param mcast_forwarding_per_edge: 
        """
        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.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', {
        '_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()),
        '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 = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'gateway_path': 'gateway_path',
                            'mcast_routes_per_edge': 'mcast_routes_per_edge',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 gateway_path=None,
                 mcast_routes_per_edge=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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  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.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.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', {
        '_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()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 PolicyNatListResult(VapiStruct):
    """
    Paged Collection of NAT Types

    .. 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_: 
        :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:`PolicyNat` or ``None``
        :param results: NAT 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)


PolicyNatListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_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__, 'PolicyNat'))),
    },
    PolicyNatListResult,
    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"
    """


    """
    POLICY_BASED_VPN_MODE_BYPASS = "BYPASS"
    """


    """
    POLICY_BASED_VPN_MODE_MATCH = "MATCH"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'policy_based_vpn_mode': 'policy_based_vpn_mode',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 policy_based_vpn_mode=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. For VPC DNAT NATRule, destination network address should
            be IPv4 address allocated from External Block associated with VPC.
            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  policy_based_vpn_mode: :class:`str` or ``None``
        :param policy_based_vpn_mode: Possible values are: 
            
            * :attr:`PolicyNatRule.POLICY_BASED_VPN_MODE_BYPASS`
            * :attr:`PolicyNatRule.POLICY_BASED_VPN_MODE_MATCH`
            
            It indicates how the NSX edge applies Nat Policy for VPN traffic.
            It is supported only for Nat Rule action type DNAT and NO_DNAT. For
            all other NAT action, leave it unassigned. BYPASS - Default vpn
            mode. It indicates that Nat policy will be applied to the inbound
            traffic on Routed Based VPN tunnel, if the policy based VTI is in
            the \"scope\" for this rule. Default value will be set to BYPASS if
            MATCH - It indicates that this NAT rule will only match the Policy
            Based VPN traffic.
        :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 or IPSecVpnSession 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. If user specify the CIDR, this value is
            actually used as an IP pool that includes both the subnet and
            broadcast addresses as valid for NAT translations. This does not
            support IP range or IP sets. Comma separated list of single IP
            addresses is not suported for DNAT and REFLEXIVE rules. 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. For VPC SNAT and Refelexive NATRule,
            translated network address should be IPv4 address allocated from
            External Block associated with VPC. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.policy_based_vpn_mode = policy_based_vpn_mode
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'policy_based_vpn_mode': type.OptionalType(type.StringType()),
        '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_: 
        :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_: 
        :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: 
        """
        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_: 
        :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 PolicyNiocProfile(VapiStruct):
    """
    This profile is created for Network I/O Control(NIOC).

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyNiocProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'enabled': 'enabled',
                            'host_infra_traffic_res': 'host_infra_traffic_res',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'required_capabilities': 'required_capabilities',
                            }

    def __init__(self,
                 enabled=None,
                 host_infra_traffic_res=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='PolicyNiocProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 required_capabilities=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The enabled property specifies the status of NIOC feature. When
            enabled is set to true, NIOC feature is turned on and the bandwidth
            allocations specified for the traffic resources are enforced. When
            enabled is set to false, NIOC feature is turned off and no
            bandwidth allocation is guaranteed. By default, enabled will be set
            to true.
        :type  host_infra_traffic_res: :class:`list` of :class:`PolicyPolicyResourceAllocation` or ``None``
        :param host_infra_traffic_res: host_infra_traffic_res specifies bandwidth allocation for various
            traffic resources.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYUPLINKHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYNIOCPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  required_capabilities: :class:`list` of :class:`str` or ``None``
        :param required_capabilities: 
        """
        self.enabled = enabled
        self.host_infra_traffic_res = host_infra_traffic_res
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.required_capabilities = required_capabilities
        VapiStruct.__init__(self)

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

PolicyNiocProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nioc_profile', {
        'enabled': type.OptionalType(type.BooleanType()),
        'host_infra_traffic_res': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyPolicyResourceAllocation'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'required_capabilities': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyNiocProfile,
    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',
                            'compliance_names': 'compliance_names',
                            'description': 'description',
                            'non_compliance_code': 'non_compliance_code',
                            'reported_by': 'reported_by',
                            }

    def __init__(self,
                 affected_resources=None,
                 compliance_names=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  compliance_names: :class:`list` of :class:`str` or ``None``
        :param compliance_names: Names of the compliance programs according to which the affected
            resources are non-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  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: 
        """
        self.affected_resources = affected_resources
        self.compliance_names = compliance_names
        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'))),
        'compliance_names': type.OptionalType(type.ListType(type.StringType())),
        'description': type.OptionalType(type.StringType()),
        'non_compliance_code': type.OptionalType(type.IntegerType()),
        'reported_by': type.OptionalType(type.ReferenceType(__name__, 'PolicyResourceReference')),
    },
    PolicyNonCompliantConfig,
    False,
    None))



class PolicyOspfDatabaseListResult(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',
                            'last_update_timestamp': 'last_update_timestamp',
                            'results': 'results',
                            'tier0_path': 'tier0_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 last_update_timestamp=None,
                 results=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_: 
        :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  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:`OspfDatabaseStatus` or ``None``
        :param results: array of OSPF database data
            This 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 for Tier0 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.
        """
        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.last_update_timestamp = last_update_timestamp
        self.results = results
        self.tier0_path = tier0_path
        VapiStruct.__init__(self)


PolicyOspfDatabaseListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_ospf_database_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()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OspfDatabaseStatus'))),
        'tier0_path': type.OptionalType(type.StringType()),
    },
    PolicyOspfDatabaseListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bsm_enabled': 'bsm_enabled',
                            'rp_address': 'rp_address',
                            'rp_address_multicast_ranges': 'rp_address_multicast_ranges',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bsm_enabled=None,
                 rp_address=None,
                 rp_address_multicast_ranges=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  bsm_enabled: :class:`bool` or ``None``
        :param bsm_enabled: Activate/deactivate bootstrap messaging Configuration.
        :type  rp_address: :class:`str` or ``None``
        :param rp_address: Static IPv4 multicast address configuration. format: ip
        :type  rp_address_multicast_ranges: :class:`list` of :class:`RpAddressMulticastRanges` or ``None``
        :param rp_address_multicast_ranges: Static IPv4 multicast address and assciated multicast groups
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.bsm_enabled = bsm_enabled
        self.rp_address = rp_address
        self.rp_address_multicast_ranges = rp_address_multicast_ranges
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'bsm_enabled': type.OptionalType(type.BooleanType()),
        'rp_address': type.OptionalType(type.StringType()),
        'rp_address_multicast_ranges': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RpAddressMulticastRanges'))),
    },
    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_: 
        :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 PolicyPktCapResource(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'logical_port_path': 'logical_port_path',
                            'pktcap_file_download_url': 'pktcap_file_download_url',
                            'port_id': 'port_id',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 logical_port_path=None,
                 pktcap_file_download_url=None,
                 port_id=None,
                 resource_type=None,
                ):
        """
        :type  logical_port_path: :class:`str` or ``None``
        :param logical_port_path: The path of segment port or router port where the packets are
            captured
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pktcap_file_download_url: :class:`str` or ``None``
        :param pktcap_file_download_url: Packet capture file download URL
            This 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_id: :class:`str` or ``None``
        :param port_id: The ID of logical port where packet capture action is performed
            This 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 of packet capture resource
        """
        self.logical_port_path = logical_port_path
        self.pktcap_file_download_url = pktcap_file_download_url
        self.port_id = port_id
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

PolicyPktCapResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_pkt_cap_resource', {
        'logical_port_path': type.OptionalType(type.StringType()),
        'pktcap_file_download_url': type.OptionalType(type.StringType()),
        'port_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    PolicyPktCapResource,
    False,
    None))



class PolicyPolicyResourceAllocation(VapiStruct):
    """
    Specify limit, shares and reservation for all kinds of traffic. Values for
    limit and reservation are expressed in percentage. And for shares, the
    value is expressed as a number between 1-100. The overall reservation among
    all traffic types should not exceed 75%. Otherwise, the API request will be
    rejected.

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



    _canonical_to_pep_names = {
                            'limit': 'limit',
                            'reservation': 'reservation',
                            'shares': 'shares',
                            'traffic_type': 'traffic_type',
                            }

    def __init__(self,
                 limit=None,
                 reservation=None,
                 shares=None,
                 traffic_type=None,
                ):
        """
        :type  limit: :class:`float` or ``None``
        :param limit: The limit property specifies the maximum bandwidth allocation for a
            given traffic type and is expressed in percentage. The default
            value for this field is set to -1 which means the traffic is
            unbounded for the traffic type. All other negative values for this
            property is not supported and will be rejected by the API.
        :type  reservation: :class:`float` or ``None``
        :param reservation: Minimum guaranteed bandwidth percentage
        :type  shares: :class:`long` or ``None``
        :param shares: Shares format: int32
        :type  traffic_type: :class:`PolicyHostInfraTrafficType` or ``None``
        :param traffic_type: 
        """
        self.limit = limit
        self.reservation = reservation
        self.shares = shares
        self.traffic_type = traffic_type
        VapiStruct.__init__(self)


PolicyPolicyResourceAllocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_policy_resource_allocation', {
        'limit': type.OptionalType(type.DoubleType()),
        'reservation': type.OptionalType(type.DoubleType()),
        'shares': type.OptionalType(type.IntegerType()),
        'traffic_type': type.OptionalType(type.ReferenceType(__name__, 'PolicyHostInfraTrafficType')),
    },
    PolicyPolicyResourceAllocation,
    False,
    None))



class PolicyPoolUsage(VapiStruct):
    """
    IP usage statistics in a IpAddressPool.

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



    _canonical_to_pep_names = {
                            'allocated_ip_allocations': 'allocated_ip_allocations',
                            'available_ips': 'available_ips',
                            'requested_ip_allocations': 'requested_ip_allocations',
                            'total_ips': 'total_ips',
                            }

    def __init__(self,
                 allocated_ip_allocations=None,
                 available_ips=None,
                 requested_ip_allocations=None,
                 total_ips=None,
                ):
        """
        :type  allocated_ip_allocations: :class:`long` or ``None``
        :param allocated_ip_allocations: Total number of allocated IPs shown are from NSX manager. NSX
            manager uses default release delay of 2 mins. Till this delay
            passes, IPs will be shown as allocated (and counted in allocated
            ips). In this period of time there could be mismatch in
            requested_ip_allocations and allocated_ip_allocations. format:
            int64
            This 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_ips: :class:`long` or ``None``
        :param available_ips: Total number of available IPs in a IpAddressPool format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  requested_ip_allocations: :class:`long` or ``None``
        :param requested_ip_allocations: Total number of requested IP allocations in a IpAddressPool format:
            int64
            This 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_ips: :class:`long` or ``None``
        :param total_ips: Total number of IPs in a IpAddressPool format: int64
            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.allocated_ip_allocations = allocated_ip_allocations
        self.available_ips = available_ips
        self.requested_ip_allocations = requested_ip_allocations
        self.total_ips = total_ips
        VapiStruct.__init__(self)


PolicyPoolUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_pool_usage', {
        'allocated_ip_allocations': type.OptionalType(type.IntegerType()),
        'available_ips': type.OptionalType(type.IntegerType()),
        'requested_ip_allocations': type.OptionalType(type.IntegerType()),
        'total_ips': type.OptionalType(type.IntegerType()),
    },
    PolicyPoolUsage,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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 PolicyRequestParameter(VapiStruct):
    """
    Optional API Request Parameter to be used in HAPI.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyRequestParameter"
    """
    Identifier denoting this class, when it is used 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_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='PolicyRequestParameter',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: The type of this request parameter.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

PolicyRequestParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_request_parameter', {
        'resource_type': type.StringType(),
    },
    PolicyRequestParameter,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'owner_id': 'owner_id',
                            'path': 'path',
                            }

    def __init__(self,
                 is_valid=None,
                 target_display_name=None,
                 target_id=None,
                 target_type=None,
                 owner_id=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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            resource. This is used in 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  path: :class:`str` or ``None``
        :param path: Absolute path of this object.
            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.owner_id = owner_id
        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()),
        'owner_id': 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',
                            'owner_id': 'owner_id',
                            'path': 'path',
                            'origin_site_id': 'origin_site_id',
                            'remote_path': 'remote_path',
                            }

    def __init__(self,
                 is_valid=None,
                 target_display_name=None,
                 target_id=None,
                 target_type=None,
                 owner_id=None,
                 path=None,
                 origin_site_id=None,
                 remote_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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            resource. This is used in 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  path: :class:`str` or ``None``
        :param path: Absolute path of this object.
            This 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_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            this group. This is used in 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  remote_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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.
        """
        self.is_valid = is_valid
        self.target_display_name = target_display_name
        self.target_id = target_id
        self.target_type = target_type
        self.owner_id = owner_id
        self.path = path
        self.origin_site_id = origin_site_id
        self.remote_path = remote_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()),
        'owner_id': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'origin_site_id': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_: 
        :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 PolicyRouteAdvertisementRule(VapiStruct):
    """
    policy route advertisement rule.

    .. 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_TIER0_STATIC = "TIER0_STATIC"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER0_CONNECTED = "TIER0_CONNECTED"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER0_NAT = "TIER0_NAT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER0_DNS_FORWARDER_IP = "TIER0_DNS_FORWARDER_IP"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER0_IPSEC_LOCAL_ENDPOINT = "TIER0_IPSEC_LOCAL_ENDPOINT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER1_STATIC = "TIER1_STATIC"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER1_CONNECTED = "TIER1_CONNECTED"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER1_LB_SNAT = "TIER1_LB_SNAT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER1_LB_VIP = "TIER1_LB_VIP"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER1_NAT = "TIER1_NAT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER1_DNS_FORWARDER_IP = "TIER1_DNS_FORWARDER_IP"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_TIER1_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:`PolicyRouteAdvertisementRule.ACTION_PERMIT`
            * :attr:`PolicyRouteAdvertisementRule.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 for rule.
        :type  prefix_operator: :class:`str` or ``None``
        :param prefix_operator: Possible values are: 
            
            * :attr:`PolicyRouteAdvertisementRule.PREFIX_OPERATOR_GE`
            * :attr:`PolicyRouteAdvertisementRule.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:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER0_STATIC`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER0_CONNECTED`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER0_NAT`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER0_DNS_FORWARDER_IP`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER0_IPSEC_LOCAL_ENDPOINT`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER1_STATIC`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER1_CONNECTED`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER1_LB_SNAT`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER1_LB_VIP`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER1_NAT`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER1_DNS_FORWARDER_IP`
            *
              :attr:`PolicyRouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_TIER1_IPSEC_LOCAL_ENDPOINT`
            
            Enable different types of route advertisements.
        :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)


PolicyRouteAdvertisementRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_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())),
    },
    PolicyRouteAdvertisementRule,
    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: 
        :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: 
        :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 PolicySIExcludeList(VapiStruct):
    """
    List of entities where Service Insertion will not be enforced. Exclusion
    List can contain PolicyGroup(s) or SegmentPort(s) or Segment(s).

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


PolicySIExcludeList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_SI_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
    },
    PolicySIExcludeList,
    False,
    None))



class PolicySIStatusConfiguration(VapiStruct):
    """
    It represents status of Service Insertion for North-South and East-West
    context types.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'east_west_enabled': 'east_west_enabled',
                            'north_south_enabled': 'north_south_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 east_west_enabled=None,
                 north_south_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  east_west_enabled: :class:`bool` or ``None``
        :param east_west_enabled: If set to true, service insertion for east-west traffic is enabled.
        :type  north_south_enabled: :class:`bool` or ``None``
        :param north_south_enabled: If set to true, service insertion for north-south traffic 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.east_west_enabled = east_west_enabled
        self.north_south_enabled = north_south_enabled
        VapiStruct.__init__(self)


PolicySIStatusConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_SI_status_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'east_west_enabled': type.OptionalType(type.BooleanType()),
        'north_south_enabled': type.OptionalType(type.BooleanType()),
    },
    PolicySIStatusConfiguration,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PolicyStaticRouteAdvertisement(VapiStruct):
    """
    policy static route advertisement.

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



    _canonical_to_pep_names = {
                            'advertisement_rules': 'advertisement_rules',
                            'in_filter_prefix_list': 'in_filter_prefix_list',
                            }

    def __init__(self,
                 advertisement_rules=None,
                 in_filter_prefix_list=None,
                ):
        """
        :type  advertisement_rules: :class:`list` of :class:`PolicyRouteAdvertisementRule` or ``None``
        :param advertisement_rules: Route advertisement rules.
        :type  in_filter_prefix_list: :class:`list` of :class:`str` or ``None``
        :param in_filter_prefix_list: Paths of ordered Prefix list, it breaks after first match.
        """
        self.advertisement_rules = advertisement_rules
        self.in_filter_prefix_list = in_filter_prefix_list
        VapiStruct.__init__(self)


PolicyStaticRouteAdvertisement._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_static_route_advertisement', {
        'advertisement_rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyRouteAdvertisementRule'))),
        'in_filter_prefix_list': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyStaticRouteAdvertisement,
    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 PolicyTask(VapiStruct):
    """
    This object holds the information of the task.

    .. 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',
                            'failure_msg': 'failure_msg',
                            }

    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,
                 failure_msg=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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:`PolicyTask.STATUS_RUNNING`
            * :attr:`PolicyTask.STATUS_ERROR`
            * :attr:`PolicyTask.STATUS_SUCCESS`
            * :attr:`PolicyTask.STATUS_CANCELING`
            * :attr:`PolicyTask.STATUS_CANCELED`
            * :attr:`PolicyTask.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.
        :type  failure_msg: :class:`str` or ``None``
        :param failure_msg: This property holds the reason of the task failure, if 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.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
        self.failure_msg = failure_msg
        VapiStruct.__init__(self)


PolicyTask._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_task', {
        '_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()),
        'failure_msg': type.OptionalType(type.StringType()),
    },
    PolicyTask,
    False,
    None))



class PolicyTepCsvListResult(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:`PolicyTepTableCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


PolicyTepCsvListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_tep_csv_list_result', {
        'file_name': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyTepTableCsvRecord'))),
    },
    PolicyTepCsvListResult,
    False,
    None))



class PolicyTepListResult(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',
                            'last_update_timestamp': 'last_update_timestamp',
                            'results': 'results',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 last_update_timestamp=None,
                 results=None,
                 transport_node_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_: 
        :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  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:`PolicyTepTableEntry` or ``None``
        :param results: 
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: Transport node 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.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


PolicyTepListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_tep_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()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyTepTableEntry'))),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    PolicyTepListResult,
    False,
    None))



class PolicyTepTableCsvRecord(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'segment_id': 'segment_id',
                            'tep_ip': 'tep_ip',
                            'tep_label': 'tep_label',
                            'tep_mac_address': 'tep_mac_address',
                            }

    def __init__(self,
                 segment_id=None,
                 tep_ip=None,
                 tep_label=None,
                 tep_mac_address=None,
                ):
        """
        :type  segment_id: :class:`str` or ``None``
        :param segment_id: This is the identifier of the TEP segment. This segment is NOT the
            same as logical segment or logical switch.
        :type  tep_ip: :class:`str` or ``None``
        :param tep_ip: The tunnel endpoint IP address format: ip
        :type  tep_label: :class:`long` or ``None``
        :param tep_label: The tunnel endpoint label format: int64
        :type  tep_mac_address: :class:`str` or ``None``
        :param tep_mac_address: The tunnel endpoint MAC address
        """
        self.segment_id = segment_id
        self.tep_ip = tep_ip
        self.tep_label = tep_label
        self.tep_mac_address = tep_mac_address
        VapiStruct.__init__(self)


PolicyTepTableCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_tep_table_csv_record', {
        'segment_id': type.OptionalType(type.StringType()),
        'tep_ip': type.OptionalType(type.StringType()),
        'tep_label': type.OptionalType(type.IntegerType()),
        'tep_mac_address': type.OptionalType(type.StringType()),
    },
    PolicyTepTableCsvRecord,
    False,
    None))



class PolicyTepTableEntry(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'segment_id': 'segment_id',
                            'tep_ip': 'tep_ip',
                            'tep_label': 'tep_label',
                            'tep_mac_address': 'tep_mac_address',
                            }

    def __init__(self,
                 segment_id=None,
                 tep_ip=None,
                 tep_label=None,
                 tep_mac_address=None,
                ):
        """
        :type  segment_id: :class:`str` or ``None``
        :param segment_id: The segment Id
        :type  tep_ip: :class:`str` or ``None``
        :param tep_ip: The tunnel endpoint IP address format: ip
        :type  tep_label: :class:`long` or ``None``
        :param tep_label: The tunnel endpoint label format: int64
        :type  tep_mac_address: :class:`str` or ``None``
        :param tep_mac_address: The tunnel endpoint MAC address
        """
        self.segment_id = segment_id
        self.tep_ip = tep_ip
        self.tep_label = tep_label
        self.tep_mac_address = tep_mac_address
        VapiStruct.__init__(self)


PolicyTepTableEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_tep_table_entry', {
        'segment_id': type.OptionalType(type.StringType()),
        'tep_ip': type.OptionalType(type.StringType()),
        'tep_label': type.OptionalType(type.IntegerType()),
        'tep_mac_address': type.OptionalType(type.StringType()),
    },
    PolicyTepTableEntry,
    False,
    None))



class PolicyTier1MulticastConfig(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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Activate/deactivate Multicast Configuration. Whenever service
            router needs to be added/deleted from tier1, user needs to
            deactivate multicast first.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        VapiStruct.__init__(self)


PolicyTier1MulticastConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_tier1_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
    },
    PolicyTier1MulticastConfig,
    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 PolicyTraceflowObservationDelivered(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'interface_path': 'interface_path',
                            'segment_port_path': 'segment_port_path',
                            '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',
                            'site_path': 'site_path',
                            '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,
                 interface_path=None,
                 segment_port_path=None,
                 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=None,
                 sequence_no=None,
                 site_path=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  interface_path: :class:`str` or ``None``
        :param interface_path: Path of 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  segment_port_path: :class:`str` or ``None``
        :param segment_port_path: Path of segment 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  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`
            * :attr:`TraceflowObservationDelivered.RESOLUTION_TYPE_ARP_LRP`
            
            This field specifies the resolution type of ARP
            ARP_SUPPRESSION_PORT_CACHE - ARP request is suppressed by IP table.
            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 by VM. ARP_LRP - No suppression and the ARP request is
            resolved by 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  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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.interface_path = interface_path
        self.segment_port_path = segment_port_path
        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.site_path = site_path
        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

PolicyTraceflowObservationDelivered._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_traceflow_observation_delivered', {
        'interface_path': type.OptionalType(type.StringType()),
        'segment_port_path': type.OptionalType(type.StringType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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()),
    },
    PolicyTraceflowObservationDelivered,
    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',
                            'interface_path': 'interface_path',
                            'nat_rule_path': 'nat_rule_path',
                            'segment_port_path': 'segment_port_path',
                            'acl_rule_id': 'acl_rule_id',
                            'arp_fail_reason': 'arp_fail_reason',
                            'ipsec_fail_reason': 'ipsec_fail_reason',
                            'jumpto_rule_id': 'jumpto_rule_id',
                            'l2_rule_id': 'l2_rule_id',
                            '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',
                            'site_path': 'site_path',
                            '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,
                 interface_path=None,
                 nat_rule_path=None,
                 segment_port_path=None,
                 acl_rule_id=None,
                 arp_fail_reason=None,
                 ipsec_fail_reason=None,
                 jumpto_rule_id=None,
                 l2_rule_id=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,
                 site_path=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  interface_path: :class:`str` or ``None``
        :param interface_path: Path of 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  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  segment_port_path: :class:`str` or ``None``
        :param segment_port_path: Path of segment 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  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: This field is specified when the traceflow packet matched a L3
            firewall 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  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  ipsec_fail_reason: :class:`str` or ``None``
        :param ipsec_fail_reason: Possible values are: 
            
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SA_NOT_FOUND`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UDP_ENC_STATE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SEQ_ROLLOVER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_FRAG_NEEDED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_TUN_IFACE_DOWN`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_NOMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_BLOCK`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_SEQ_NUM_REPEAT`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_RECV_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_PROC_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ZERO_SEQ_NUM_RECVD`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ENQUEUE_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_SIZE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_UNSUPPORTED_ALGO`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_INCOMPLETE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_SESSION_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_ARGS_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_NO_BUF_SPACE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_UNSUPPORTED_CIPHER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED_INV_PADDING`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_PADDING_REMOVAL_FAILED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_IP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_UDP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_TCP`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UNKNOWN`
            
            This field specifies the IPSec VPN fails reason IPSEC_SA_NOT_FOUND
            - IPSec SA required for processing the packet does not exist
            IPSEC_UDP_ENC_STATE_MISMATCH - ESP packet is UDP encapsulated but
            IPsec SA does not expect UDP encapsulation IPSEC_SEQ_ROLLOVER -
            IPSec SA sequence number has exceeded the maximum value
            IPSEC_FRAG_NEEDED - Received packet has DF bit set in IP header but
            requires fragmentation due to ESP encapsulation
            IPSEC_TUN_IFACE_DOWN - IPSec tunnel interface is down
            IPSEC_POLICY_NOMATCH - Received packet does not match IPSec policy
            IPSEC_POLICY_BLOCK - IPSec packet processing failed
            IPSEC_POLICY_ERROR - IPSec packet processing failed
            IPSEC_REPLAY_SEQ_NUM_REPEAT - IPSec packet is dropped due to replay
            IPSEC_REPLAY_RECV_DELAY - IPSec packet is dropped due to replay
            IPSEC_REPLAY_PROC_DELAY - IPSec packet is dropped due to replay
            IPSEC_ZERO_SEQ_NUM_RECVD - ESP packet is received with sequence
            number as zero IPSEC_ENQUEUE_FAIL - Packet processing failed during
            crypto operation IPSEC_AUTH_DGST_MISMATCH - Packet integrity check
            failed due to digest mismatch IPSEC_AUTH_DGST_SIZE_MISMATCH -
            Packet integrity check failed due to invalid digest length
            IPSEC_AUTH_UNSUPPORTED_ALGO - Packet integrity check failed due to
            unsupported hash algorithm IPSEC_CRYPTO_FAIL - Packet processing
            failed during crypto operation IPSEC_CRYPTO_PROC_INCOMPLETE -
            Packet processing failed during crypto operation
            IPSEC_CRYPTO_SESSION_INV - Packet processing failed during crypto
            operation IPSEC_CRYPTO_ARGS_INV - Packet processing failed during
            crypto operation IPSEC_CRYPTO_PROC_ERROR - Packet processing failed
            during crypto operation IPSEC_CRYPTO_NO_BUF_SPACE - Packet
            processing failed during crypto operation
            IPSEC_CRYPTO_UNSUPPORTED_CIPHER - Packet processing failed during
            crypto operation IPSEC_MALFORMED - Received ESP packet is malformed
            IPSEC_MALFORMED_INV_PADDING - Received ESP packet is malformed
            IPSEC_PADDING_REMOVAL_FAILED - Received ESP packet is malformed
            IPSEC_INNER_MALFORMED - IP packet after ESP decryption is malformed
            IPSEC_INNER_MALFORMED_IP - IP packet after ESP decryption is
            malformed IPSEC_INNER_MALFORMED_UDP - IP packet after ESP
            decryption is malformed IPSEC_INNER_MALFORMED_TCP - IP packet after
            ESP decryption is malformed IPSEC_UNKNOWN - IPSec VPN failure
            reason is unknown
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  jumpto_rule_id: :class:`long` or ``None``
        :param jumpto_rule_id: This field is specified when the traceflow packet matched a jump-to
            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  l2_rule_id: :class:`long` or ``None``
        :param l2_rule_id: This field is specified when the traceflow packet matched a l2
            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  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: This field is specified when the traceflow packet matched a NAT
            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  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_BROADCAST`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_DLB`
            * :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_MANAGEMENT`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_RTEP_TUNNEL`
            * :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_VLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_FW_STATE`
            * :attr:`TraceflowObservationDropped.REASON_NO_MAC`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.REASON_FILTERED_UPLINK`
            
            This field specifies the drop reason of traceflow packet. ARP_FAIL
            - ARP request fails for some reasons, please refer arp_fail_reason
            for detail BFD - BFD packet is dropped because traversed by
            non-operative interface or encountering internal error (e.g.,
            memory insufficient) BROADCAST - Packet is dropped during
            traversing the interface (e.g., Edge uplink, Edge centralized
            service port) which disallow ethernet broadcast DHCP - DHCP packet
            is malformed DLB - The packet is disallowed by distributed load
            balancing FW_RULE - The packet matches a drop or reject rule of DFW
            or Edge firewall GENEVE - GENEVE packet is malformed GRE - GRE
            packet is malformed or traverses a non-operative interface IFACE -
            Packet traverses a non-operative interface IP - Packet is dropped
            because of IP related causes (e.g., ICMPv4/ICMPv6 packet is
            malformed, or DF flag is set but fragment must be performed for the
            packet) or corresponding interface is not found or inoperative
            IP_REASS - Packet is dropped during IP reassembly IPSEC - IPsec
            protocol related packet is dropped IPSEC_VTI - IPsec required SA is
            not found or traversing inoperative interface cause packet dropped
            L2VPN - VLAN id of GRE packet is invalid L4PORT - Layer 4 packet
            (e.g., BFD, DHCP) is dropped LB - Packet is dropped by load
            balancing rule LROUTER - Packet is dropped by logical router
            LSERVICE - Packet is malformed or traverses inoperative logical
            service interface LSWITCH - Packet is dropped by logical switch
            MANAGEMENT - Packet is dropped by Edge datapath MANAGEMENT service
            port MD_PROXY - Packet is dropped by metadata proxy NAT - Packet is
            dropped by NAT rule RTEP_TUNNEL - Unused drop reason ND_NS_FAIL -
            Neighbor Discovery packet fails NEIGH - ARP or Neighbor Discovery
            packet fails NO_EIP_FOUND - Destination IP is not an elastic IP
            NO_EIP_ASSOCIATION - Elastic IP is not associated with active edge
            VDR ENI NO_ENI_FOR_IP - There is no ENI found for the destination
            IP NO_ENI_FOR_LIF - Cannot find an ENI associated with uplink LIF
            NO_ROUTE - Cannot find route for destination IP
            NO_ROUTE_TABLE_FOUND - Cannot find associated route table
            NO_UNDERLAY_ROUTE_FOUND - Cannot find AWS route to destination
            NOT_VDR_DOWNLINK - Packet is not forwarded to VMC unmanaged VDR
            downlink NO_VDR_FOUND - VMC unmanaged VDR associated with Edge
            uplink is not found NO_VDR_ON_HOST - Cannot find VMC unmanaged VDR
            list on this host NOT_VDR_UPLINK - Packet is not forwarded to VDR
            uplink SERVICE_INSERT - Packet from guest VM to service VM or from
            service VM to guest VM is dropped by firewall rule SPOOFGUARD -
            Packet is blocked by SpoofGuard policy TTL_ZERO - The IPv4 time to
            live field or the IPv6 hop limit field of packet is zero TUNNEL -
            Overlay tunnel management packet (VNI value of GENEVE header is 0,
            e.g., BFD) is dropped VLAN - VLAN id of packet is disallowed by the
            given port VXLAN - VXLAN packet is malformed or cannot find tunnel
            port for it VXSTT - Unused drop reason VMC_NO_RESPONSE - Failed to
            query VMC observations as no response from VMC app WRONG_UPLINK -
            Packet is not routed to the expected Edge uplink by VMC unmanaged
            VDR FW_STATE - Packet is dropped by stateful firewall NO_MAC - Drop
            by vswitch as no destination MAC hit MAC Table. FILTERED_UPLINK -
            Filtering applied at the corresponding UPLINK having no
            aggregation.
            This 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.interface_path = interface_path
        self.nat_rule_path = nat_rule_path
        self.segment_port_path = segment_port_path
        self.acl_rule_id = acl_rule_id
        self.arp_fail_reason = arp_fail_reason
        self.ipsec_fail_reason = ipsec_fail_reason
        self.jumpto_rule_id = jumpto_rule_id
        self.l2_rule_id = l2_rule_id
        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.site_path = site_path
        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()),
        'interface_path': type.OptionalType(type.StringType()),
        'nat_rule_path': type.OptionalType(type.StringType()),
        'segment_port_path': type.OptionalType(type.StringType()),
        'acl_rule_id': type.OptionalType(type.IntegerType()),
        'arp_fail_reason': type.OptionalType(type.StringType()),
        'ipsec_fail_reason': type.OptionalType(type.StringType()),
        'jumpto_rule_id': type.OptionalType(type.IntegerType()),
        'l2_rule_id': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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',
                            'component_path': 'component_path',
                            'interface_path': 'interface_path',
                            'jumpto_rule_path': 'jumpto_rule_path',
                            'l2_rule_path': 'l2_rule_path',
                            'nat_rule_path': 'nat_rule_path',
                            'segment_port_path': 'segment_port_path',
                            'component_id': 'component_id',
                            'service_path_index': 'service_path_index',
                            'acl_rule_id': 'acl_rule_id',
                            'arp_fail_reason': 'arp_fail_reason',
                            'ipsec_fail_reason': 'ipsec_fail_reason',
                            'jumpto_rule_id': 'jumpto_rule_id',
                            'l2_rule_id': 'l2_rule_id',
                            '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',
                            'site_path': 'site_path',
                            '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,
                 component_path=None,
                 interface_path=None,
                 jumpto_rule_path=None,
                 l2_rule_path=None,
                 nat_rule_path=None,
                 segment_port_path=None,
                 component_id=None,
                 service_path_index=None,
                 acl_rule_id=None,
                 arp_fail_reason=None,
                 ipsec_fail_reason=None,
                 jumpto_rule_id=None,
                 l2_rule_id=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,
                 site_path=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  component_path: :class:`str` or ``None``
        :param component_path: The path 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  interface_path: :class:`str` or ``None``
        :param interface_path: Path of 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  jumpto_rule_path: :class:`str` or ``None``
        :param jumpto_rule_path: The path of the jump-to rule that was applied to 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  l2_rule_path: :class:`str` or ``None``
        :param l2_rule_path: The path of the l2 rule that was applied to 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  segment_port_path: :class:`str` or ``None``
        :param segment_port_path: Path of segment 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  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: This field is specified when the traceflow packet matched a L3
            firewall 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  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  ipsec_fail_reason: :class:`str` or ``None``
        :param ipsec_fail_reason: Possible values are: 
            
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SA_NOT_FOUND`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UDP_ENC_STATE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SEQ_ROLLOVER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_FRAG_NEEDED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_TUN_IFACE_DOWN`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_NOMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_BLOCK`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_SEQ_NUM_REPEAT`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_RECV_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_PROC_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ZERO_SEQ_NUM_RECVD`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ENQUEUE_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_SIZE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_UNSUPPORTED_ALGO`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_INCOMPLETE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_SESSION_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_ARGS_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_NO_BUF_SPACE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_UNSUPPORTED_CIPHER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED_INV_PADDING`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_PADDING_REMOVAL_FAILED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_IP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_UDP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_TCP`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UNKNOWN`
            
            This field specifies the IPSec VPN fails reason IPSEC_SA_NOT_FOUND
            - IPSec SA required for processing the packet does not exist
            IPSEC_UDP_ENC_STATE_MISMATCH - ESP packet is UDP encapsulated but
            IPsec SA does not expect UDP encapsulation IPSEC_SEQ_ROLLOVER -
            IPSec SA sequence number has exceeded the maximum value
            IPSEC_FRAG_NEEDED - Received packet has DF bit set in IP header but
            requires fragmentation due to ESP encapsulation
            IPSEC_TUN_IFACE_DOWN - IPSec tunnel interface is down
            IPSEC_POLICY_NOMATCH - Received packet does not match IPSec policy
            IPSEC_POLICY_BLOCK - IPSec packet processing failed
            IPSEC_POLICY_ERROR - IPSec packet processing failed
            IPSEC_REPLAY_SEQ_NUM_REPEAT - IPSec packet is dropped due to replay
            IPSEC_REPLAY_RECV_DELAY - IPSec packet is dropped due to replay
            IPSEC_REPLAY_PROC_DELAY - IPSec packet is dropped due to replay
            IPSEC_ZERO_SEQ_NUM_RECVD - ESP packet is received with sequence
            number as zero IPSEC_ENQUEUE_FAIL - Packet processing failed during
            crypto operation IPSEC_AUTH_DGST_MISMATCH - Packet integrity check
            failed due to digest mismatch IPSEC_AUTH_DGST_SIZE_MISMATCH -
            Packet integrity check failed due to invalid digest length
            IPSEC_AUTH_UNSUPPORTED_ALGO - Packet integrity check failed due to
            unsupported hash algorithm IPSEC_CRYPTO_FAIL - Packet processing
            failed during crypto operation IPSEC_CRYPTO_PROC_INCOMPLETE -
            Packet processing failed during crypto operation
            IPSEC_CRYPTO_SESSION_INV - Packet processing failed during crypto
            operation IPSEC_CRYPTO_ARGS_INV - Packet processing failed during
            crypto operation IPSEC_CRYPTO_PROC_ERROR - Packet processing failed
            during crypto operation IPSEC_CRYPTO_NO_BUF_SPACE - Packet
            processing failed during crypto operation
            IPSEC_CRYPTO_UNSUPPORTED_CIPHER - Packet processing failed during
            crypto operation IPSEC_MALFORMED - Received ESP packet is malformed
            IPSEC_MALFORMED_INV_PADDING - Received ESP packet is malformed
            IPSEC_PADDING_REMOVAL_FAILED - Received ESP packet is malformed
            IPSEC_INNER_MALFORMED - IP packet after ESP decryption is malformed
            IPSEC_INNER_MALFORMED_IP - IP packet after ESP decryption is
            malformed IPSEC_INNER_MALFORMED_UDP - IP packet after ESP
            decryption is malformed IPSEC_INNER_MALFORMED_TCP - IP packet after
            ESP decryption is malformed IPSEC_UNKNOWN - IPSec VPN failure
            reason is unknown
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  jumpto_rule_id: :class:`long` or ``None``
        :param jumpto_rule_id: This field is specified when the traceflow packet matched a jump-to
            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  l2_rule_id: :class:`long` or ``None``
        :param l2_rule_id: This field is specified when the traceflow packet matched a l2
            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  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: This field is specified when the traceflow packet matched a NAT
            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  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_BROADCAST`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_DLB`
            * :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_MANAGEMENT`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_RTEP_TUNNEL`
            * :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_VLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_FW_STATE`
            * :attr:`TraceflowObservationDropped.REASON_NO_MAC`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.REASON_FILTERED_UPLINK`
            
            This field specifies the drop reason of traceflow packet. ARP_FAIL
            - ARP request fails for some reasons, please refer arp_fail_reason
            for detail BFD - BFD packet is dropped because traversed by
            non-operative interface or encountering internal error (e.g.,
            memory insufficient) BROADCAST - Packet is dropped during
            traversing the interface (e.g., Edge uplink, Edge centralized
            service port) which disallow ethernet broadcast DHCP - DHCP packet
            is malformed DLB - The packet is disallowed by distributed load
            balancing FW_RULE - The packet matches a drop or reject rule of DFW
            or Edge firewall GENEVE - GENEVE packet is malformed GRE - GRE
            packet is malformed or traverses a non-operative interface IFACE -
            Packet traverses a non-operative interface IP - Packet is dropped
            because of IP related causes (e.g., ICMPv4/ICMPv6 packet is
            malformed, or DF flag is set but fragment must be performed for the
            packet) or corresponding interface is not found or inoperative
            IP_REASS - Packet is dropped during IP reassembly IPSEC - IPsec
            protocol related packet is dropped IPSEC_VTI - IPsec required SA is
            not found or traversing inoperative interface cause packet dropped
            L2VPN - VLAN id of GRE packet is invalid L4PORT - Layer 4 packet
            (e.g., BFD, DHCP) is dropped LB - Packet is dropped by load
            balancing rule LROUTER - Packet is dropped by logical router
            LSERVICE - Packet is malformed or traverses inoperative logical
            service interface LSWITCH - Packet is dropped by logical switch
            MANAGEMENT - Packet is dropped by Edge datapath MANAGEMENT service
            port MD_PROXY - Packet is dropped by metadata proxy NAT - Packet is
            dropped by NAT rule RTEP_TUNNEL - Unused drop reason ND_NS_FAIL -
            Neighbor Discovery packet fails NEIGH - ARP or Neighbor Discovery
            packet fails NO_EIP_FOUND - Destination IP is not an elastic IP
            NO_EIP_ASSOCIATION - Elastic IP is not associated with active edge
            VDR ENI NO_ENI_FOR_IP - There is no ENI found for the destination
            IP NO_ENI_FOR_LIF - Cannot find an ENI associated with uplink LIF
            NO_ROUTE - Cannot find route for destination IP
            NO_ROUTE_TABLE_FOUND - Cannot find associated route table
            NO_UNDERLAY_ROUTE_FOUND - Cannot find AWS route to destination
            NOT_VDR_DOWNLINK - Packet is not forwarded to VMC unmanaged VDR
            downlink NO_VDR_FOUND - VMC unmanaged VDR associated with Edge
            uplink is not found NO_VDR_ON_HOST - Cannot find VMC unmanaged VDR
            list on this host NOT_VDR_UPLINK - Packet is not forwarded to VDR
            uplink SERVICE_INSERT - Packet from guest VM to service VM or from
            service VM to guest VM is dropped by firewall rule SPOOFGUARD -
            Packet is blocked by SpoofGuard policy TTL_ZERO - The IPv4 time to
            live field or the IPv6 hop limit field of packet is zero TUNNEL -
            Overlay tunnel management packet (VNI value of GENEVE header is 0,
            e.g., BFD) is dropped VLAN - VLAN id of packet is disallowed by the
            given port VXLAN - VXLAN packet is malformed or cannot find tunnel
            port for it VXSTT - Unused drop reason VMC_NO_RESPONSE - Failed to
            query VMC observations as no response from VMC app WRONG_UPLINK -
            Packet is not routed to the expected Edge uplink by VMC unmanaged
            VDR FW_STATE - Packet is dropped by stateful firewall NO_MAC - Drop
            by vswitch as no destination MAC hit MAC Table. FILTERED_UPLINK -
            Filtering applied at the corresponding UPLINK having no
            aggregation.
            This 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.component_path = component_path
        self.interface_path = interface_path
        self.jumpto_rule_path = jumpto_rule_path
        self.l2_rule_path = l2_rule_path
        self.nat_rule_path = nat_rule_path
        self.segment_port_path = segment_port_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.ipsec_fail_reason = ipsec_fail_reason
        self.jumpto_rule_id = jumpto_rule_id
        self.l2_rule_id = l2_rule_id
        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.site_path = site_path
        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()),
        'component_path': type.OptionalType(type.StringType()),
        'interface_path': type.OptionalType(type.StringType()),
        'jumpto_rule_path': type.OptionalType(type.StringType()),
        'l2_rule_path': type.OptionalType(type.StringType()),
        'nat_rule_path': type.OptionalType(type.StringType()),
        'segment_port_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()),
        'ipsec_fail_reason': type.OptionalType(type.StringType()),
        'jumpto_rule_id': type.OptionalType(type.IntegerType()),
        'l2_rule_id': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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',
                            'component_path': 'component_path',
                            'dst_component_path': 'dst_component_path',
                            'interface_path': 'interface_path',
                            'ipsec_vpn_path': 'ipsec_vpn_path',
                            'jumpto_rule_path': 'jumpto_rule_path',
                            'l2_rule_path': 'l2_rule_path',
                            'nat_rule_path': 'nat_rule_path',
                            'segment_port_path': 'segment_port_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',
                            'ipsec_vpn': 'ipsec_vpn',
                            'jumpto_rule_id': 'jumpto_rule_id',
                            'l2_rule_id': 'l2_rule_id',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'next_hop': 'next_hop',
                            'resend_type': 'resend_type',
                            'route_prefix': 'route_prefix',
                            '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',
                            'vlan': 'vlan',
                            'vni': 'vni',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'site_path': 'site_path',
                            '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,
                 component_path=None,
                 dst_component_path=None,
                 interface_path=None,
                 ipsec_vpn_path=None,
                 jumpto_rule_path=None,
                 l2_rule_path=None,
                 nat_rule_path=None,
                 segment_port_path=None,
                 acl_rule_id=None,
                 component_id=None,
                 dst_component_id=None,
                 dst_component_name=None,
                 dst_component_type=None,
                 ipsec_vpn=None,
                 jumpto_rule_id=None,
                 l2_rule_id=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 next_hop=None,
                 resend_type=None,
                 route_prefix=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,
                 vlan=None,
                 vni=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type=None,
                 sequence_no=None,
                 site_path=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  component_path: :class:`str` or ``None``
        :param component_path: The path 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_path: :class:`str` or ``None``
        :param dst_component_path: The path 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  interface_path: :class:`str` or ``None``
        :param interface_path: Path of 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  ipsec_vpn_path: :class:`PolicyTraceflowObservationIpsecVpn` or ``None``
        :param ipsec_vpn_path: 
        :type  jumpto_rule_path: :class:`str` or ``None``
        :param jumpto_rule_path: The path of the jump-to rule that was applied to 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  l2_rule_path: :class:`str` or ``None``
        :param l2_rule_path: The path of the l2 rule that was applied to 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  segment_port_path: :class:`str` or ``None``
        :param segment_port_path: Path of segment 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  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: This field is specified when the traceflow packet matched a L3
            firewall 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  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_EDGE_RTEP_TUNNEL`
            *
              :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_DLB`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_LB`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_ROUTING`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_DFW`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_FORWARDING`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_HOST_SWITCH`
            *
              :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  ipsec_vpn: :class:`TraceflowObservationIpsecVpn` or ``None``
        :param ipsec_vpn: 
        :type  jumpto_rule_id: :class:`long` or ``None``
        :param jumpto_rule_id: This field is specified when the traceflow packet matched a jump-to
            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  l2_rule_id: :class:`long` or ``None``
        :param l2_rule_id: This field is specified when the traceflow packet matched a l2
            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  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: This field is specified when the traceflow packet matched a NAT
            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  next_hop: :class:`str` or ``None``
        :param next_hop: This field is specified when the traceflow packet was routed by
            logical router. 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  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  route_prefix: :class:`str` or ``None``
        :param route_prefix: This field is specified when the traceflow packet was routed by
            logical router. 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  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  vlan: :class:`long` or ``None``
        :param vlan: This field is specified when the traceflow packet was forwarded by
            a VLAN logical network. format: int64
            This 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: This field is specified when the traceflow packet was forwarded by
            an overlay logical network. 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.component_path = component_path
        self.dst_component_path = dst_component_path
        self.interface_path = interface_path
        self.ipsec_vpn_path = ipsec_vpn_path
        self.jumpto_rule_path = jumpto_rule_path
        self.l2_rule_path = l2_rule_path
        self.nat_rule_path = nat_rule_path
        self.segment_port_path = segment_port_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.ipsec_vpn = ipsec_vpn
        self.jumpto_rule_id = jumpto_rule_id
        self.l2_rule_id = l2_rule_id
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.next_hop = next_hop
        self.resend_type = resend_type
        self.route_prefix = route_prefix
        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.vlan = vlan
        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.site_path = site_path
        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()),
        'component_path': type.OptionalType(type.StringType()),
        'dst_component_path': type.OptionalType(type.StringType()),
        'interface_path': type.OptionalType(type.StringType()),
        'ipsec_vpn_path': type.OptionalType(type.ReferenceType(__name__, 'PolicyTraceflowObservationIpsecVpn')),
        'jumpto_rule_path': type.OptionalType(type.StringType()),
        'l2_rule_path': type.OptionalType(type.StringType()),
        'nat_rule_path': type.OptionalType(type.StringType()),
        'segment_port_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()),
        'ipsec_vpn': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationIpsecVpn')),
        'jumpto_rule_id': type.OptionalType(type.IntegerType()),
        'l2_rule_id': type.OptionalType(type.IntegerType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'next_hop': type.OptionalType(type.StringType()),
        'resend_type': type.OptionalType(type.StringType()),
        'route_prefix': 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()),
        'vlan': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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 PolicyTraceflowObservationIpsecVpn(VapiStruct):
    """
    The related policy path of IPsec VPN traceflow observations

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



    _canonical_to_pep_names = {
                            'session_path': 'session_path',
                            'vti_path': 'vti_path',
                            }

    def __init__(self,
                 session_path=None,
                 vti_path=None,
                ):
        """
        :type  session_path: :class:`str` or ``None``
        :param session_path: The path of the IPsec 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  vti_path: :class:`str` or ``None``
        :param vti_path: The path of the virtual tunnel interface for Route-Based IPsec VPN
            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_path = session_path
        self.vti_path = vti_path
        VapiStruct.__init__(self)


PolicyTraceflowObservationIpsecVpn._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_traceflow_observation_ipsec_vpn', {
        'session_path': type.OptionalType(type.StringType()),
        'vti_path': type.OptionalType(type.StringType()),
    },
    PolicyTraceflowObservationIpsecVpn,
    False,
    None))



class PolicyTraceflowObservationReceivedLogical(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'component_path': 'component_path',
                            'interface_path': 'interface_path',
                            'ipsec_vpn_path': 'ipsec_vpn_path',
                            'segment_port_path': 'segment_port_path',
                            'src_component_path': 'src_component_path',
                            'component_id': 'component_id',
                            'ipsec_vpn': 'ipsec_vpn',
                            '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',
                            'vlan': 'vlan',
                            'vni': 'vni',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'site_path': 'site_path',
                            '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_path=None,
                 interface_path=None,
                 ipsec_vpn_path=None,
                 segment_port_path=None,
                 src_component_path=None,
                 component_id=None,
                 ipsec_vpn=None,
                 lport_id=None,
                 lport_name=None,
                 src_component_id=None,
                 src_component_name=None,
                 src_component_type=None,
                 svc_mac=None,
                 vlan=None,
                 vni=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type=None,
                 sequence_no=None,
                 site_path=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  component_path: :class:`str` or ``None``
        :param component_path: The path 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  interface_path: :class:`str` or ``None``
        :param interface_path: Path of 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  ipsec_vpn_path: :class:`PolicyTraceflowObservationIpsecVpn` or ``None``
        :param ipsec_vpn_path: 
        :type  segment_port_path: :class:`str` or ``None``
        :param segment_port_path: Path of segment 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  src_component_path: :class:`str` or ``None``
        :param src_component_path: The path 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  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  ipsec_vpn: :class:`TraceflowObservationIpsecVpn` or ``None``
        :param ipsec_vpn: 
        :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_EDGE_RTEP_TUNNEL`
            *
              :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_DLB`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_LB`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_ROUTING`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_DFW`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_FORWARDING`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_HOST_SWITCH`
            *
              :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  vlan: :class:`long` or ``None``
        :param vlan: This field is specified when the traceflow packet was received by a
            VLAN logical network. format: int64
            This 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: This field is specified when the traceflow packet was received by
            an overlay logical network. 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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_path = component_path
        self.interface_path = interface_path
        self.ipsec_vpn_path = ipsec_vpn_path
        self.segment_port_path = segment_port_path
        self.src_component_path = src_component_path
        self.component_id = component_id
        self.ipsec_vpn = ipsec_vpn
        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.vlan = vlan
        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.site_path = site_path
        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

PolicyTraceflowObservationReceivedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_traceflow_observation_received_logical', {
        'component_path': type.OptionalType(type.StringType()),
        'interface_path': type.OptionalType(type.StringType()),
        'ipsec_vpn_path': type.OptionalType(type.ReferenceType(__name__, 'PolicyTraceflowObservationIpsecVpn')),
        'segment_port_path': type.OptionalType(type.StringType()),
        'src_component_path': type.OptionalType(type.StringType()),
        'component_id': type.OptionalType(type.StringType()),
        'ipsec_vpn': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationIpsecVpn')),
        '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()),
        'vlan': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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()),
    },
    PolicyTraceflowObservationReceivedLogical,
    False,
    None))



class PolicyTraceflowObservationRelayedLogical(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'logical_component_path': 'logical_component_path',
                            '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',
                            'site_path': 'site_path',
                            '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,
                 logical_component_path=None,
                 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=None,
                 sequence_no=None,
                 site_path=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  logical_component_path: :class:`str` or ``None``
        :param logical_component_path: This field specifies the logical component that relay service
            located on.
            This 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_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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.logical_component_path = logical_component_path
        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.site_path = site_path
        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

PolicyTraceflowObservationRelayedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_traceflow_observation_relayed_logical', {
        'logical_component_path': type.OptionalType(type.StringType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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()),
    },
    PolicyTraceflowObservationRelayedLogical,
    False,
    None))



class PolicyTransportZone(VapiStruct):
    """
    Transport Zone.

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


    """
    FORWARDING_MODE_IPV6_ONLY = "IPV6_ONLY"
    """


    """
    FORWARDING_MODE_IPV4_AND_IPV6 = "IPV4_AND_IPV6"
    """


    """
    TZ_TYPE_OVERLAY_STANDARD = "OVERLAY_STANDARD"
    """


    """
    TZ_TYPE_OVERLAY_ENS = "OVERLAY_ENS"
    """


    """
    TZ_TYPE_VLAN_BACKED = "VLAN_BACKED"
    """


    """
    TZ_TYPE_OVERLAY_BACKED = "OVERLAY_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'authorized_vlans': 'authorized_vlans',
                            'forwarding_mode': 'forwarding_mode',
                            'is_default': 'is_default',
                            'nested_nsx': 'nested_nsx',
                            'nsx_id': 'nsx_id',
                            'origin_id': 'origin_id',
                            'transport_zone_profile_paths': 'transport_zone_profile_paths',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 authorized_vlans=None,
                 forwarding_mode=None,
                 is_default=None,
                 nested_nsx=None,
                 nsx_id=None,
                 origin_id=None,
                 transport_zone_profile_paths=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  authorized_vlans: :class:`list` of :class:`str` or ``None``
        :param authorized_vlans: This field lists vlan ids allowed on logical network entities, eg.
            Segments, bridges, etc. created under this transport zone. Can be
            empty, VLAN id or a range of VLAN ids specified with '-' in
            between. An empty list allows all vlan ids.
        :type  forwarding_mode: :class:`str` or ``None``
        :param forwarding_mode: Possible values are: 
            
            * :attr:`PolicyTransportZone.FORWARDING_MODE_IPV4_ONLY`
            * :attr:`PolicyTransportZone.FORWARDING_MODE_IPV6_ONLY`
            * :attr:`PolicyTransportZone.FORWARDING_MODE_IPV4_AND_IPV6`
            
            Transport Zone Forwarding Mode, must be one of either IPV4_ONLY or
            IPV6_ONLY or IPV4_AND_IPV6. Default is IPV4_ONLY.
        :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  nested_nsx: :class:`bool` or ``None``
        :param nested_nsx: This flag should be set to true in nested NSX environment. When the
            \"allow_changing_vdr_mac_in_use\" property in the global config
            object RoutingGlobalConfig is false, this flag can not be changed
            if this transport zone is OVERLAY and the change will make any
            transport node in this transport zone to change the VDR MAC used in
            any host switch. When this flag is true and this transport zone is
            OVERLAY, all host switches in this transport zone will use the VDR
            MAC in the \"vdr_mac_nested\" property in the global config object
            RoutingGlobalConfig.
        :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  origin_id: :class:`str` or ``None``
        :param origin_id: This field is populated only if the transport zone was created by
            NSX system to support security on vSphere Distributed Switch (vDS).
            The origin_id will refer to the identifier of corresponding vDS
            from it's parent vCenter 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.
        :type  transport_zone_profile_paths: :class:`list` of :class:`str` or ``None``
        :param transport_zone_profile_paths: Policy Transport Zone Profile paths
        :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_OVERLAY_BACKED`
            * :attr:`PolicyTransportZone.TZ_TYPE_UNKNOWN`
            
            Transport Zone Traffic type, must be one of either VLAN_BACKED or
            OVERLAY_BACKED. OVERLAY_STANDARD, OVERLAY_ENS and UNKNOWN are
            DEPRECATED. STANDARD, ENS and ENS_INTERRUPT are hostSwitch modes
            and same need to be given in HostTransportNode.HostSwitchSpec.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.authorized_vlans = authorized_vlans
        self.forwarding_mode = forwarding_mode
        self.is_default = is_default
        self.nested_nsx = nested_nsx
        self.nsx_id = nsx_id
        self.origin_id = origin_id
        self.transport_zone_profile_paths = transport_zone_profile_paths
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'authorized_vlans': type.OptionalType(type.ListType(type.StringType())),
        'forwarding_mode': type.OptionalType(type.StringType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'nested_nsx': type.OptionalType(type.BooleanType()),
        'nsx_id': type.OptionalType(type.StringType()),
        'origin_id': type.OptionalType(type.StringType()),
        'transport_zone_profile_paths': type.OptionalType(type.ListType(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_: 
        :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 PolicyTransportZoneProfile(VapiStruct):
    """
    Transport Zone Profile.

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


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bfd_config': 'bfd_config',
                            'tz_profile_type': 'tz_profile_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bfd_config=None,
                 tz_profile_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_config: :class:`BfdHealthMonitoringConfig` or ``None``
        :param bfd_config: 
        :type  tz_profile_type: :class:`str` or ``None``
        :param tz_profile_type: Possible values are: 
            
            * :attr:`PolicyTransportZoneProfile.TZ_PROFILE_TYPE_BFD`
            
            Policy Transport Zone 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.bfd_config = bfd_config
        self.tz_profile_type = tz_profile_type
        VapiStruct.__init__(self)


PolicyTransportZoneProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_transport_zone_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_config': type.OptionalType(type.ReferenceType(__name__, 'BfdHealthMonitoringConfig')),
        'tz_profile_type': type.OptionalType(type.StringType()),
    },
    PolicyTransportZoneProfile,
    False,
    None))



class PolicyTransportZoneProfileListResult(VapiStruct):
    """
    Paged collection of Policy Transport Zone 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_: 
        :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:`PolicyTransportZoneProfile` or ``None``
        :param results: Policy Transport Zone 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)


PolicyTransportZoneProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_transport_zone_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__, 'PolicyTransportZoneProfile'))),
    },
    PolicyTransportZoneProfileListResult,
    False,
    None))



class PolicyTunnelListResult(VapiStruct):
    """
    Paged collection of Policy Tunnel entities

    .. 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_: 
        :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: Policy Tunnel list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Tunnel`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`Tunnel`.
        """
        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)


PolicyTunnelListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_tunnel_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__, 'Tunnel')]))),
    },
    PolicyTunnelListResult,
    False,
    None))



class PolicyUplinkHostSwitchProfile(VapiStruct):
    """
    Profile for uplink policies

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

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

    """
    OVERLAY_ENCAP_VXLAN = "VXLAN"
    """


    """
    OVERLAY_ENCAP_GENEVE = "GENEVE"
    """


    """



    _canonical_to_pep_names = {
                            'lags': 'lags',
                            'mtu': 'mtu',
                            'named_teamings': 'named_teamings',
                            'overlay_encap': 'overlay_encap',
                            'teaming': 'teaming',
                            'transport_vlan': 'transport_vlan',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'required_capabilities': 'required_capabilities',
                            }

    def __init__(self,
                 lags=None,
                 mtu=None,
                 named_teamings=None,
                 overlay_encap=None,
                 teaming=None,
                 transport_vlan=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='PolicyUplinkHostSwitchProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 required_capabilities=None,
                ):
        """
        :type  lags: :class:`list` of :class:`Lag` or ``None``
        :param lags: list of LACP group
        :type  mtu: :class:`long` or ``None``
        :param mtu: Maximum Transmission Unit used for uplinks format: int32
        :type  named_teamings: :class:`list` of :class:`NamedTeamingPolicy` or ``None``
        :param named_teamings: List of named uplink teaming policies that can be used by logical
            switches
        :type  overlay_encap: :class:`str` or ``None``
        :param overlay_encap: Possible values are: 
            
            * :attr:`PolicyUplinkHostSwitchProfile.OVERLAY_ENCAP_VXLAN`
            * :attr:`PolicyUplinkHostSwitchProfile.OVERLAY_ENCAP_GENEVE`
            
            The protocol used to encapsulate overlay traffic
        :type  teaming: :class:`TeamingPolicy` or ``None``
        :param teaming: 
        :type  transport_vlan: :class:`long` or ``None``
        :param transport_vlan: VLAN used for tagging Overlay traffic of associated HostSwitch
            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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYUPLINKHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYNIOCPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  required_capabilities: :class:`list` of :class:`str` or ``None``
        :param required_capabilities: 
        """
        self.lags = lags
        self.mtu = mtu
        self.named_teamings = named_teamings
        self.overlay_encap = overlay_encap
        self.teaming = teaming
        self.transport_vlan = transport_vlan
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.required_capabilities = required_capabilities
        VapiStruct.__init__(self)

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

PolicyUplinkHostSwitchProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_uplink_host_switch_profile', {
        'lags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Lag'))),
        'mtu': type.OptionalType(type.IntegerType()),
        'named_teamings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NamedTeamingPolicy'))),
        'overlay_encap': type.OptionalType(type.StringType()),
        'teaming': type.OptionalType(type.ReferenceType(__name__, 'TeamingPolicy')),
        'transport_vlan': 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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'required_capabilities': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyUplinkHostSwitchProfile,
    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
    activated/deactivated, 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. This field is deprecated. URL
            Categorization will not be supported in association with context
            profiles.

            .. deprecated:: unknown
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Property which specifies the activating/deactivating 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PolicyVpcNatRule(VapiStruct):
    """
    Represents a NAT rule between source and destination at for a given VPC.

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


    """
    ACTION_DNAT = "DNAT"
    """


    """
    ACTION_REFLEXIVE = "REFLEXIVE"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'sequence_number': 'sequence_number',
                            'source_network': 'source_network',
                            'translated_network': 'translated_network',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 sequence_number=None,
                 source_network=None,
                 translated_network=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`PolicyVpcNatRule.ACTION_SNAT`
            * :attr:`PolicyVpcNatRule.ACTION_DNAT`
            * :attr:`PolicyVpcNatRule.ACTION_REFLEXIVE`
            
            Source NAT(SNAT) - translates a source IP address into an outbound
            packet so that the packet appears to originate from a different
            network. Destination NAT(DNAT) - translates the destination IP
            address of inbound packets so that packets are delivered to a
            target address into another network. Reflexive NAT(REFLEXIVE) -
            one-to-one mapping of source and destination IP addresses.
        :type  destination_network: :class:`str` or ``None``
        :param destination_network: This supports single IP address and it does not support IP range or
            IP sets. For 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. In case
            of DNAT NATRule, destination network address should be IPv4 address
            allocated from External Block associated with VPC. 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:`PolicyVpcNatRule.FIREWALL_MATCH_MATCH_EXTERNAL_ADDRESS`
            * :attr:`PolicyVpcNatRule.FIREWALL_MATCH_MATCH_INTERNAL_ADDRESS`
            * :attr:`PolicyVpcNatRule.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.
        :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  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  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 and REFLEXIVE rules, this is a mandatory field and
            represents the source network of the packets leaving the network.
            For 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. If user specify the CIDR, this value is
            actually used as an IP pool that includes both the subnet and
            broadcast addresses as valid for NAT translations. This does not
            support IP range or IP sets. For SNAT, DNAT and REFLEXIVE rules,
            this ia a mandatory field, which represents the translated network
            address. In case of SNAT and Refelexive NATRule, translated network
            address should be single IPv4 address allocated from External Block
            associated with VPC. format: list-of-address-or-block-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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.sequence_number = sequence_number
        self.source_network = source_network
        self.translated_network = translated_network
        VapiStruct.__init__(self)


PolicyVpcNatRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_vpc_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'source_network': type.OptionalType(type.StringType()),
        'translated_network': type.OptionalType(type.StringType()),
    },
    PolicyVpcNatRule,
    False,
    None))



class PolicyVpcNatRuleListResult(VapiStruct):
    """
    Paged Collection of VPC 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_: 
        :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:`PolicyVpcNatRule` or ``None``
        :param results: VPC 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)


PolicyVpcNatRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_vpc_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__, 'PolicyVpcNatRule'))),
    },
    PolicyVpcNatRuleListResult,
    False,
    None))



class PolicyVtepHAHostSwitchProfile(VapiStruct):
    """
    Host Switch for VTEP High Availability

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyVtepHAHostSwitchProfile"
    """
    Identifier denoting this class, when it is used 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_recovery': 'auto_recovery',
                            'auto_recovery_initial_wait': 'auto_recovery_initial_wait',
                            'auto_recovery_max_backoff': 'auto_recovery_max_backoff',
                            'enabled': 'enabled',
                            'failover_timeout': 'failover_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'required_capabilities': 'required_capabilities',
                            }

    def __init__(self,
                 auto_recovery=None,
                 auto_recovery_initial_wait=None,
                 auto_recovery_max_backoff=None,
                 enabled=None,
                 failover_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='PolicyVtepHAHostSwitchProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 required_capabilities=None,
                ):
        """
        :type  auto_recovery: :class:`bool` or ``None``
        :param auto_recovery: The auto_recovery property specifies the status of autonomous
            recovery option for VTEP High Availability feature. When
            auto_recovery is set to true, faulted vmknic will be checked after
            every auto_recovery_max_backoff time and if it is recovered, VMs
            will be moved back to that VTEP. By default, auto_recovery will be
            set to true.
        :type  auto_recovery_initial_wait: :class:`long` or ``None``
        :param auto_recovery_initial_wait: This property controls after how much time the autonomous recovery
            should start. format: int32
        :type  auto_recovery_max_backoff: :class:`long` or ``None``
        :param auto_recovery_max_backoff: This property controls after how much time should faulted vmknic be
            checked to see if the VMs can be moved back to the initial VTEP.
            format: int32
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The enabled property specifies the status of VTEP High Availability
            feature. When enabled is set to true, VTEP High Availability
            feature is turned on and VMs will be moved to alternate healthy
            VTEP once fault is detected at a vmknic. By default, enabled will
            be set to true.
        :type  failover_timeout: :class:`long` or ``None``
        :param failover_timeout: This property controls after how much time should VMs be moved to
            alternate healthy VTEP once fault is detected at a vmknic. If the
            value is set to 0, VMs will be moved to alternate healthy VTEP
            immediately after detecting the fault at vmknic. format: int32
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYUPLINKHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYLLDPHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYNIOCPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYEXTRACONFIGHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYVTEPHAHOSTSWITCHPROFILE`
            *
              :attr:`PolicyBaseHostSwitchProfile.RESOURCE_TYPE_POLICYHIGHPERFORMANCEHOSTSWITCHPROFILE`
            
            Supported HostSwitch profiles.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  required_capabilities: :class:`list` of :class:`str` or ``None``
        :param required_capabilities: 
        """
        self.auto_recovery = auto_recovery
        self.auto_recovery_initial_wait = auto_recovery_initial_wait
        self.auto_recovery_max_backoff = auto_recovery_max_backoff
        self.enabled = enabled
        self.failover_timeout = failover_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.required_capabilities = required_capabilities
        VapiStruct.__init__(self)

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

PolicyVtepHAHostSwitchProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_vtep_HA_host_switch_profile', {
        'auto_recovery': type.OptionalType(type.BooleanType()),
        'auto_recovery_initial_wait': type.OptionalType(type.IntegerType()),
        'auto_recovery_max_backoff': type.OptionalType(type.IntegerType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'failover_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'required_capabilities': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyVtepHAHostSwitchProfile,
    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 PortAttacher(VapiStruct):
    """
    VM or vmknic entity attached to LogicalPort

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



    _canonical_to_pep_names = {
                            'entity': 'entity',
                            'host': 'host',
                            }

    def __init__(self,
                 entity=None,
                 host=None,
                ):
        """
        :type  entity: :class:`str` or ``None``
        :param entity: This is a vmknic name if the attacher is vmknic. Otherwise, it is
            full path of the attached VM's config file
        :type  host: :class:`str` or ``None``
        :param host: TransportNode on which the attacher resides
        """
        self.entity = entity
        self.host = host
        VapiStruct.__init__(self)


PortAttacher._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_attacher', {
        'entity': type.OptionalType(type.StringType()),
        'host': type.OptionalType(type.StringType()),
    },
    PortAttacher,
    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"
    """


    """
    ALLOCATE_ADDRESSES_DHCP = "DHCP"
    """


    """
    ALLOCATE_ADDRESSES_DHCPV6 = "DHCPV6"
    """


    """
    ALLOCATE_ADDRESSES_SLAAC = "SLAAC"
    """


    """
    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',
                            'bms_interface_config': 'bms_interface_config',
                            'context_id': 'context_id',
                            'context_type': 'context_type',
                            'evpn_vlans': 'evpn_vlans',
                            'hyperbus_mode': 'hyperbus_mode',
                            'id': 'id',
                            'traffic_tag': 'traffic_tag',
                            'type': 'type',
                            }

    def __init__(self,
                 allocate_addresses=None,
                 app_id=None,
                 bms_interface_config=None,
                 context_id=None,
                 context_type=None,
                 evpn_vlans=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`
            * :attr:`PortAttachment.ALLOCATE_ADDRESSES_DHCP`
            * :attr:`PortAttachment.ALLOCATE_ADDRESSES_DHCPV6`
            * :attr:`PortAttachment.ALLOCATE_ADDRESSES_SLAAC`
            
            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  bms_interface_config: :class:`AttachedInterfaceEntry` or ``None``
        :param bms_interface_config: 
        :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  evpn_vlans: :class:`list` of :class:`str` or ``None``
        :param evpn_vlans: List of Evpn tenant VLAN IDs the Parent logical-port serves in Evpn
            Route-Server mode. Only effective when attachment type is PARENT
            and the logical-port is attached to vRouter VM.
        :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.bms_interface_config = bms_interface_config
        self.context_id = context_id
        self.context_type = context_type
        self.evpn_vlans = evpn_vlans
        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()),
        'bms_interface_config': type.OptionalType(type.ReferenceType(__name__, 'AttachedInterfaceEntry')),
        'context_id': type.OptionalType(type.StringType()),
        'context_type': type.OptionalType(type.StringType()),
        'evpn_vlans': type.OptionalType(type.ListType(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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PortMirrorFilter(VapiStruct):
    """


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


    """
    PROTOCOL_UDP = "UDP"
    """


    """



    _canonical_to_pep_names = {
                            'destination_ips': 'destination_ips',
                            'destination_ports': 'destination_ports',
                            'protocol': 'protocol',
                            'source_ips': 'source_ips',
                            'source_ports': 'source_ports',
                            }

    def __init__(self,
                 destination_ips=None,
                 destination_ports=None,
                 protocol=None,
                 source_ips=None,
                 source_ports=None,
                ):
        """
        :type  destination_ips: :class:`IPAddresses` or ``None``
        :param destination_ips: 
        :type  destination_ports: :class:`str` or ``None``
        :param destination_ports: Destination port in the form of a port or port range, used to match
            the destination port of a packet. If not provided, no filtering by
            destination port is performed. format: port-or-range
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`PortMirrorFilter.PROTOCOL_TCP`
            * :attr:`PortMirrorFilter.PROTOCOL_UDP`
            
            The transport protocols of TCP or UDP, used to match the transport
            protocol of a packet. If not provided, no filtering by IP protocols
            is performed.
        :type  source_ips: :class:`IPAddresses` or ``None``
        :param source_ips: 
        :type  source_ports: :class:`str` or ``None``
        :param source_ports: Source port in the form of a port or port range, used to match the
            source port of a packet. If not provided, no filtering by source
            port is performed. format: port-or-range
        """
        self.destination_ips = destination_ips
        self.destination_ports = destination_ports
        self.protocol = protocol
        self.source_ips = source_ips
        self.source_ports = source_ports
        VapiStruct.__init__(self)


PortMirrorFilter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_mirror_filter', {
        'destination_ips': type.OptionalType(type.ReferenceType(__name__, 'IPAddresses')),
        'destination_ports': type.OptionalType(type.StringType()),
        'protocol': type.OptionalType(type.StringType()),
        'source_ips': type.OptionalType(type.ReferenceType(__name__, 'IPAddresses')),
        'source_ports': type.OptionalType(type.StringType()),
    },
    PortMirrorFilter,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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"
    """


    """
    FILTER_ACTION_INCLUDE = "INCLUDE"
    """


    """
    FILTER_ACTION_EXCLUDE = "EXCLUDE"
    """


    """
    PROFILE_TYPE_REMOTE_L3_SPAN = "REMOTE_L3_SPAN"
    """


    """
    PROFILE_TYPE_LOGICAL_SPAN = "LOGICAL_SPAN"
    """


    """
    TCP_IP_STACK_DEFAULT = "Default"
    """


    """
    TCP_IP_STACK_MIRROR = "Mirror"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'filter_action': 'filter_action',
                            'gre_key': 'gre_key',
                            'port_mirroring_filters': 'port_mirroring_filters',
                            'profile_type': 'profile_type',
                            'snap_length': 'snap_length',
                            'tcp_ip_stack': 'tcp_ip_stack',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_group=None,
                 direction=None,
                 encapsulation_type=None,
                 erspan_id=None,
                 filter_action=None,
                 gre_key=None,
                 port_mirroring_filters=None,
                 profile_type=None,
                 snap_length=None,
                 tcp_ip_stack=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  filter_action: :class:`str` or ``None``
        :param filter_action: Possible values are: 
            
            * :attr:`PortMirroringProfile.FILTER_ACTION_INCLUDE`
            * :attr:`PortMirroringProfile.FILTER_ACTION_EXCLUDE`
            
            If set to INCLUDE, packets matching all filters will be mirrored.
            If set to EXCLUDE, packets NOT matching any filters will be
            mirrored.
        :type  gre_key: :class:`long` or ``None``
        :param gre_key: User-configurable 32-bit key only for GRE format: int32
        :type  port_mirroring_filters: :class:`list` of :class:`PortMirrorFilter` or ``None``
        :param port_mirroring_filters: An array of 5-tuples used to filter packets for the mirror session.
            If not provided, all the packets will be mirrored. This field is
            with filter_action which defines whether packets matching the
            filter will be included or excluded
        :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
        :type  tcp_ip_stack: :class:`str` or ``None``
        :param tcp_ip_stack: Possible values are: 
            
            * :attr:`PortMirroringProfile.TCP_IP_STACK_DEFAULT`
            * :attr:`PortMirroringProfile.TCP_IP_STACK_MIRROR`
            
            User can provide Mirror stack or Default stack to send mirror
            traffic. If profile type is REMOTE_L3_SPAN, tcp_ip_stack type is
            used else 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.filter_action = filter_action
        self.gre_key = gre_key
        self.port_mirroring_filters = port_mirroring_filters
        self.profile_type = profile_type
        self.snap_length = snap_length
        self.tcp_ip_stack = tcp_ip_stack
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'filter_action': type.OptionalType(type.StringType()),
        'gre_key': type.OptionalType(type.IntegerType()),
        'port_mirroring_filters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortMirrorFilter'))),
        'profile_type': type.OptionalType(type.StringType()),
        'snap_length': type.OptionalType(type.IntegerType()),
        'tcp_ip_stack': type.OptionalType(type.StringType()),
    },
    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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 PrecheckParameters(VapiStruct):
    """
    Parameters for nvds upgrade precheck

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



    _canonical_to_pep_names = {
                            'cluster_ids': 'cluster_ids',
                            }

    def __init__(self,
                 cluster_ids=None,
                ):
        """
        :type  cluster_ids: :class:`list` of :class:`str` or ``None``
        :param cluster_ids: Cluster ID list for nvds upgrade precheck
            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.cluster_ids = cluster_ids
        VapiStruct.__init__(self)


PrecheckParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.precheck_parameters', {
        'cluster_ids': type.OptionalType(type.ListType(type.StringType())),
    },
    PrecheckParameters,
    False,
    None))



class PreconfiguredEndpoint(VapiStruct):
    """
    Tunnel endpoint configuration of preconfigured host switch

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



    _canonical_to_pep_names = {
                            'device_name': 'device_name',
                            }

    def __init__(self,
                 device_name=None,
                ):
        """
        :type  device_name: :class:`str` or ``None``
        :param device_name: Name of the virtual tunnel endpoint
        """
        self.device_name = device_name
        VapiStruct.__init__(self)


PreconfiguredEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.preconfigured_endpoint', {
        'device_name': type.OptionalType(type.StringType()),
    },
    PreconfiguredEndpoint,
    False,
    None))



class PreconfiguredHostSwitch(VapiStruct):
    """
    Preconfigured host switch is used for manually configured transport node.

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



    _canonical_to_pep_names = {
                            'endpoints': 'endpoints',
                            'host_switch_id': 'host_switch_id',
                            'transport_zone_endpoints': 'transport_zone_endpoints',
                            }

    def __init__(self,
                 endpoints=None,
                 host_switch_id=None,
                 transport_zone_endpoints=None,
                ):
        """
        :type  endpoints: :class:`list` of :class:`PreconfiguredEndpoint` or ``None``
        :param endpoints: List of virtual tunnel endpoints which are preconfigured on this
            host switch
        :type  host_switch_id: :class:`str` or ``None``
        :param host_switch_id: External Id of the preconfigured host switch.
        :type  transport_zone_endpoints: :class:`list` of :class:`TransportZoneEndPoint` or ``None``
        :param transport_zone_endpoints: List of TransportZones that are to be associated with specified
            host switch.
        """
        self.endpoints = endpoints
        self.host_switch_id = host_switch_id
        self.transport_zone_endpoints = transport_zone_endpoints
        VapiStruct.__init__(self)


PreconfiguredHostSwitch._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.preconfigured_host_switch', {
        'endpoints': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PreconfiguredEndpoint'))),
        'host_switch_id': type.OptionalType(type.StringType()),
        'transport_zone_endpoints': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TransportZoneEndPoint'))),
    },
    PreconfiguredHostSwitch,
    False,
    None))



class PreconfiguredHostSwitchSpec(VapiStruct):
    """
    Preconfigured host switch specification is used for manually configured
    transport node. It is user's responsibility to ensure correct configuration
    is provided to NSX. This type is only valid for supported KVM fabric nodes.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PreconfiguredHostSwitchSpec"
    """
    Identifier denoting this class, when it is used 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 = {
                            'host_switches': 'host_switches',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 host_switches=None,
                 resource_type='PreconfiguredHostSwitchSpec',
                ):
        """
        :type  host_switches: :class:`list` of :class:`PreconfiguredHostSwitch` or ``None``
        :param host_switches: Preconfigured Transport Node host switches
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`HostSwitchSpec.RESOURCE_TYPE_STANDARDHOSTSWITCHSPEC`
            * :attr:`HostSwitchSpec.RESOURCE_TYPE_PRECONFIGUREDHOSTSWITCHSPEC`
        """
        self.host_switches = host_switches
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

PreconfiguredHostSwitchSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.preconfigured_host_switch_spec', {
        'host_switches': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PreconfiguredHostSwitch'))),
        'resource_type': type.StringType(),
    },
    PreconfiguredHostSwitchSpec,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 Principal(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'attributes': 'attributes',
                            }

    def __init__(self,
                 attributes=None,
                ):
        """
        :type  attributes: :class:`list` of :class:`KeyValue` or ``None``
        :param attributes: Attribute list.
        """
        self.attributes = attributes
        VapiStruct.__init__(self)


Principal._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.principal', {
        'attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValue'))),
    },
    Principal,
    False,
    None))



class ProcessInformation(VapiStruct):
    """
    Describes a process detail informaiton.

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



    _canonical_to_pep_names = {
                            'command': 'command',
                            'cpu_usage': 'cpu_usage',
                            'memory_usage': 'memory_usage',
                            'nice_value': 'nice_value',
                            'process_id': 'process_id',
                            'resident_memory_size': 'resident_memory_size',
                            'shared_memory_size': 'shared_memory_size',
                            'user': 'user',
                            'virtual_memory_size': 'virtual_memory_size',
                            }

    def __init__(self,
                 command=None,
                 cpu_usage=None,
                 memory_usage=None,
                 nice_value=None,
                 process_id=None,
                 resident_memory_size=None,
                 shared_memory_size=None,
                 user=None,
                 virtual_memory_size=None,
                ):
        """
        :type  command: :class:`str` or ``None``
        :param command: Display the command line used to start the process.
        :type  cpu_usage: :class:`float` or ``None``
        :param cpu_usage: The process's share of the elapsed CPU time since the last screen
            update, expressed as a percentage of total CPU time.
        :type  memory_usage: :class:`float` or ``None``
        :param memory_usage: A process's currently used share of available physical memory.
        :type  nice_value: :class:`str` or ``None``
        :param nice_value: A negative nice value means higher priority, whereas a positive
            nice value means lower priority. Zero in this field simply means
            priority will not be adjusted in determining a process's
            dispatch-ability.
        :type  process_id: :class:`str` or ``None``
        :param process_id: Display the process id.
        :type  resident_memory_size: :class:`float` or ``None``
        :param resident_memory_size: The non-swapped physical memoery a task is using.
        :type  shared_memory_size: :class:`float` or ``None``
        :param shared_memory_size: The amount of shared memory available to a process, not all of
            which is typically resident. It simply reflects memory that could
            be potentially shared with other processes.
        :type  user: :class:`str` or ``None``
        :param user: Display the process user.
        :type  virtual_memory_size: :class:`float` or ``None``
        :param virtual_memory_size: The total amount of virtual memory used by the process. It includes
            all code, data and shared libraries plus pages that have been
            swapped out and pages that have been mapped but not used.
        """
        self.command = command
        self.cpu_usage = cpu_usage
        self.memory_usage = memory_usage
        self.nice_value = nice_value
        self.process_id = process_id
        self.resident_memory_size = resident_memory_size
        self.shared_memory_size = shared_memory_size
        self.user = user
        self.virtual_memory_size = virtual_memory_size
        VapiStruct.__init__(self)


ProcessInformation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.process_information', {
        'command': type.OptionalType(type.StringType()),
        'cpu_usage': type.OptionalType(type.DoubleType()),
        'memory_usage': type.OptionalType(type.DoubleType()),
        'nice_value': type.OptionalType(type.StringType()),
        'process_id': type.OptionalType(type.StringType()),
        'resident_memory_size': type.OptionalType(type.DoubleType()),
        'shared_memory_size': type.OptionalType(type.DoubleType()),
        'user': type.OptionalType(type.StringType()),
        'virtual_memory_size': type.OptionalType(type.DoubleType()),
    },
    ProcessInformation,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 Project(VapiStruct):
    """
    Project is a construct that provides network isolation for all its contents
    out of the box, where the compute and networking elements within are
    isolated from other Projects. The Project 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. The
    project can be created by users with Org Admin role and read access to
    Tier0s and Edge clusters. Read access to Tier0s and Edge clusters can be
    achieved by either associating the user with another role with the required
    permissions (say Auditor), or by sharing the Tier0s and Edge clusters with
    the Org before creating the project. The project can also be created by
    users with Enterprise Admin role without explicit sharing of Tier0s and
    Edge clusters.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dedicated_resources': 'dedicated_resources',
                            'default': '_default',
                            'external_ipv4_blocks': 'external_ipv4_blocks',
                            'short_id': 'short_id',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dedicated_resources=None,
                 _default=None,
                 external_ipv4_blocks=None,
                 short_id=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  dedicated_resources: :class:`DedicatedResources` or ``None``
        :param dedicated_resources: 
        :type  _default: :class:`bool` or ``None``
        :param _default: true - the project is a default project. Default projects are
            non-editable, system create ones.
            This 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_ipv4_blocks: :class:`list` of :class:`str` or ``None``
        :param external_ipv4_blocks: IP block used for allocating CIDR blocks for public subnets. IP
            block can be consumed by all the VPCs under this project. CIDR that
            must be unique across Org/provider and will be auto advertised up
            to Org/Provider Tier0 gateway.
        :type  short_id: :class:`str` or ``None``
        :param short_id: Defaults to id if id is less than equal to 8 characters or defaults
            to random generated id if not set.
        :type  site_infos: :class:`list` of :class:`SiteInfo` or ``None``
        :param site_infos: Information related to sites applicable for given Project. For
            on-prem deployment, only 1 is allowed.
        :type  tier0s: :class:`list` of :class:`str` or ``None``
        :param tier0s: The tier 0 path or label of type Tier0 has to be pre-created before
            Project is created. The tier 0 typically provides connectivity to
            external world. List of sites for Project has to be subset of sites
            where the tier 0 spans. Label should have reference of Tier0 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dedicated_resources = dedicated_resources
        self._default = _default
        self.external_ipv4_blocks = external_ipv4_blocks
        self.short_id = short_id
        self.site_infos = site_infos
        self.tier0s = tier0s
        VapiStruct.__init__(self)


Project._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.project', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'dedicated_resources': type.OptionalType(type.ReferenceType(__name__, 'DedicatedResources')),
        'default': type.OptionalType(type.BooleanType()),
        'external_ipv4_blocks': type.OptionalType(type.ListType(type.StringType())),
        'short_id': type.OptionalType(type.StringType()),
        'site_infos': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteInfo'))),
        'tier_0s': type.OptionalType(type.ListType(type.StringType())),
    },
    Project,
    False,
    None))



class ProjectListResult(VapiStruct):
    """
    Paged Collection of PROJECT

    .. 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_: 
        :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:`Project` or ``None``
        :param results: PROJECT 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)


ProjectListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.project_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__, 'Project'))),
    },
    ProjectListResult,
    False,
    None))



class ProjectRouteFilter(VapiStruct):
    """
    Project route filter to control routes advertised from Project's Tier1
    Gateway to Tier0 Gateway. If project route filter configured for project
    then match_prefix_list must permit prefixes including public blocks for
    route advertisement from Tier1 gateway and VPC. Project route filter can
    only be configured by Enterprise Admin in case of LM and Org Admin or EA in
    case of NSX+.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'match_prefix_list': 'match_prefix_list',
                            'projects_list': 'projects_list',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 match_prefix_list=None,
                 projects_list=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  match_prefix_list: :class:`list` of :class:`str` or ``None``
        :param match_prefix_list: Policy path to prefixList to filter routes advertised from Tier1
            Gateway.
        :type  projects_list: :class:`list` of :class:`str` or ``None``
        :param projects_list: Prefix list will be applied to all Tier-1s and VPCs under the
            specified list of project Paths. Project cannot be part of multiple
            route filter configurations.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.match_prefix_list = match_prefix_list
        self.projects_list = projects_list
        VapiStruct.__init__(self)


ProjectRouteFilter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.project_route_filter', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'match_prefix_list': type.OptionalType(type.ListType(type.StringType())),
        'projects_list': type.OptionalType(type.ListType(type.StringType())),
    },
    ProjectRouteFilter,
    False,
    None))



class ProjectRouteFilterListResult(VapiStruct):
    """
    Collection of Policy project route filter.

    .. 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_: 
        :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:`ProjectRouteFilter` or ``None``
        :param results: Project route filters 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)


ProjectRouteFilterListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.project_route_filter_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__, 'ProjectRouteFilter'))),
    },
    ProjectRouteFilterListResult,
    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',
                            'drilldown_id': 'drilldown_id',
                            'field': 'field',
                            'heading': 'heading',
                            'label': 'label',
                            'label_value_separator': 'label_value_separator',
                            'navigation': 'navigation',
                            'render_configuration': 'render_configuration',
                            'rowspan': 'rowspan',
                            'separator': 'separator',
                            'span': 'span',
                            'style': 'style',
                            'type': 'type',
                            }

    def __init__(self,
                 condition=None,
                 drilldown_id=None,
                 field=None,
                 heading=None,
                 label=None,
                 label_value_separator=None,
                 navigation=None,
                 render_configuration=None,
                 rowspan=None,
                 separator=None,
                 span=None,
                 style=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  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: 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: 
        :type  label_value_separator: :class:`str` or ``None``
        :param label_value_separator: Label value separator used between label and value. It can be any
            separator like \":\" or \"-\".
        :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  rowspan: :class:`long` or ``None``
        :param rowspan: Represent the vertical span of the widget / container format: int32
        :type  separator: :class:`bool` or ``None``
        :param separator: If true, separates this property in a widget.
        :type  span: :class:`long` or ``None``
        :param span: Represent the horizontal span of the widget / container. format:
            int32
        :type  style: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param style: A style object applicable for the property item. It could be the
            any padding, margin style sheet applicable to the property item. A
            'style' property is supported in case of layout 'AUTO' only.
        :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.drilldown_id = drilldown_id
        self.field = field
        self.heading = heading
        self.label = label
        self.label_value_separator = label_value_separator
        self.navigation = navigation
        self.render_configuration = render_configuration
        self.rowspan = rowspan
        self.separator = separator
        self.span = span
        self.style = style
        self.type = type
        VapiStruct.__init__(self)


PropertyItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.property_item', {
        'condition': type.OptionalType(type.StringType()),
        'drilldown_id': type.OptionalType(type.StringType()),
        'field': type.OptionalType(type.StringType()),
        'heading': type.OptionalType(type.BooleanType()),
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'label_value_separator': type.OptionalType(type.StringType()),
        'navigation': type.OptionalType(type.StringType()),
        'render_configuration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RenderConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'separator': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'style': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'type': type.OptionalType(type.StringType()),
    },
    PropertyItem,
    False,
    None))



class ProtocolVersion(VapiStruct):
    """
    HTTP protocol version

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



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'name': 'name',
                            }

    def __init__(self,
                 enabled=None,
                 name=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable status for this protocol version
        :type  name: :class:`str` or ``None``
        :param name: Name of the TLS protocol version
        """
        self.enabled = enabled
        self.name = name
        VapiStruct.__init__(self)


ProtocolVersion._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.protocol_version', {
        'enabled': type.OptionalType(type.BooleanType()),
        'name': type.OptionalType(type.StringType()),
    },
    ProtocolVersion,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 QuotaStats(VapiStruct):
    """
    'QuotaStats' provides quota resource details.

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



    _canonical_to_pep_names = {
                            'assigned_max_limit': 'assigned_max_limit',
                            'current_inventory': 'current_inventory',
                            'object_type': 'object_type',
                            'quota_name': 'quota_name',
                            'quota_owner_id': 'quota_owner_id',
                            'quota_path': 'quota_path',
                            }

    def __init__(self,
                 assigned_max_limit=None,
                 current_inventory=None,
                 object_type=None,
                 quota_name=None,
                 quota_owner_id=None,
                 quota_path=None,
                ):
        """
        :type  assigned_max_limit: :class:`long` or ``None``
        :param assigned_max_limit: Assigned max workload 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  current_inventory: :class:`long` or ``None``
        :param current_inventory: Current workload 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  object_type: :class:`str` or ``None``
        :param object_type: Resource type 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  quota_name: :class:`str` or ``None``
        :param quota_name: Quota 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  quota_owner_id: :class:`str` or ``None``
        :param quota_owner_id: This is a UUID generated by the system for knowing whoes owns this
            object. This is used in 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  quota_path: :class:`str` or ``None``
        :param quota_path: Quota 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.assigned_max_limit = assigned_max_limit
        self.current_inventory = current_inventory
        self.object_type = object_type
        self.quota_name = quota_name
        self.quota_owner_id = quota_owner_id
        self.quota_path = quota_path
        VapiStruct.__init__(self)


QuotaStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.quota_stats', {
        'assigned_max_limit': type.OptionalType(type.IntegerType()),
        'current_inventory': type.OptionalType(type.IntegerType()),
        'object_type': type.OptionalType(type.StringType()),
        'quota_name': type.OptionalType(type.StringType()),
        'quota_owner_id': type.OptionalType(type.StringType()),
        'quota_path': type.OptionalType(type.StringType()),
    },
    QuotaStats,
    False,
    None))



class QuotaStatsListResult(VapiStruct):
    """
    Collection of QuotaStats

    .. 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:`QuotaStats` or ``None``
        :param results: QuotaStats list results
        """
        self.results = results
        VapiStruct.__init__(self)


QuotaStatsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.quota_stats_list_result', {
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'QuotaStats'))),
    },
    QuotaStatsListResult,
    False,
    None))



class QuotaStatsPerPrefix(VapiStruct):
    """
    Collection of QuotaStats for given path-prefix

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



    _canonical_to_pep_names = {
                            'path_prefix': 'path_prefix',
                            'quota_details': 'quota_details',
                            }

    def __init__(self,
                 path_prefix=None,
                 quota_details=None,
                ):
        """
        :type  path_prefix: :class:`str` or ``None``
        :param path_prefix: Path prefix for retriving the quota details.
        :type  quota_details: :class:`list` of :class:`QuotaStats` or ``None``
        :param quota_details: QuotaStats list results
        """
        self.path_prefix = path_prefix
        self.quota_details = quota_details
        VapiStruct.__init__(self)


QuotaStatsPerPrefix._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.quota_stats_per_prefix', {
        'path_prefix': type.OptionalType(type.StringType()),
        'quota_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'QuotaStats'))),
    },
    QuotaStatsPerPrefix,
    False,
    None))



class QuotaStatsPerPrefixListResult(VapiStruct):
    """
    Collection of QuotaStatsPerPrefix

    .. 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:`QuotaStatsPerPrefix` or ``None``
        :param results: QuotaStats list results
        """
        self.results = results
        VapiStruct.__init__(self)


QuotaStatsPerPrefixListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.quota_stats_per_prefix_list_result', {
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'QuotaStatsPerPrefix'))),
    },
    QuotaStatsPerPrefixListResult,
    False,
    None))



class RAConfig(VapiStruct):
    """


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


    """
    ROUTER_PREFERENCE_MEDIUM = "MEDIUM"
    """


    """
    ROUTER_PREFERENCE_HIGH = "HIGH"
    """


    """
    ROUTER_PREFERENCE_RESERVED = "RESERVED"
    """


    """



    _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',
                            'router_preference': 'router_preference',
                            }

    def __init__(self,
                 hop_limit=None,
                 prefix_lifetime=None,
                 prefix_preferred_time=None,
                 ra_interval=None,
                 router_lifetime=None,
                 router_preference=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
        :type  router_preference: :class:`str` or ``None``
        :param router_preference: Possible values are: 
            
            * :attr:`RAConfig.ROUTER_PREFERENCE_LOW`
            * :attr:`RAConfig.ROUTER_PREFERENCE_MEDIUM`
            * :attr:`RAConfig.ROUTER_PREFERENCE_HIGH`
            * :attr:`RAConfig.ROUTER_PREFERENCE_RESERVED`
            
            NDRA Router preference value with MEDIUM as default. If the
            router_lifetime is 0, the preference must be set to MEDIUM.
        """
        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
        self.router_preference = router_preference
        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()),
        'router_preference': type.OptionalType(type.StringType()),
    },
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :type  realized_firewalls: :class:`RealizedFirewalls` or ``None``
        :param realized_firewalls: 
        :type  realized_groups: :class:`RealizedGroups` or ``None``
        :param realized_groups: 
        :type  realized_services: :class:`RealizedServices` or ``None``
        :param 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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 deactivate rule. Deactivated 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        """
        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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        """
        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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        """
        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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        """
        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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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
        :type  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
    },
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'operational_status': 'operational_status',
                            'operational_status_error': 'operational_status_error',
                            'publish_status': 'publish_status',
                            'publish_status_error': 'publish_status_error',
                            'publish_status_error_code': 'publish_status_error_code',
                            'publish_status_error_details': 'publish_status_error_details',
                            'publish_time': 'publish_time',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'time_taken_for_realization': 'time_taken_for_realization',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 operational_status=None,
                 operational_status_error=None,
                 publish_status=None,
                 publish_status_error=None,
                 publish_status_error_code=None,
                 publish_status_error_details=None,
                 publish_time=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 time_taken_for_realization=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.

            .. deprecated:: unknown
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.

            .. deprecated:: unknown
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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  operational_status: :class:`str` or ``None``
        :param operational_status: Possible values could be UP, DOWN, UNKNOWN, FAILURE This list is
            not exhaustive.
        :type  operational_status_error: :class:`str` or ``None``
        :param operational_status_error: It defines the root cause for operational status error.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values could be UP, DOWN, UNKNOWN, SUCCESS This list is
            not exhaustive.
        :type  publish_status_error: :class:`str` or ``None``
        :param publish_status_error: It defines the root cause for publish status error.
        :type  publish_status_error_code: :class:`long` or ``None``
        :param publish_status_error_code: It defines error code for publish status error. format: int32
        :type  publish_status_error_details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param publish_status_error_details: Error details for publish status.
        :type  publish_time: :class:`long` or ``None``
        :param publish_time: This is the time when our system detects that data has been pushed
            to the transport nodes. This is based on a poll mechanism and hence
            this is not the accurate time when the intent was published at the
            data path. The value of -1 indicates that either the publishing is
            still in progress or the runtime status is UNKNOWN and hence not
            available. The Runtime status can be UNKNOWN if one or more hosts
            are down and the rules could not be sent to those hosts. When the
            host comes up, the runtime status will change to SUCCESS but the
            publish_time will show the value of the last realization time. Any
            new configuration change after this will start reflecting the
            proper value for publish_time format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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.

            .. deprecated:: unknown
        :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  time_taken_for_realization: :class:`long` or ``None``
        :param time_taken_for_realization: This is an approximate time taken for the realization of the intent
            to the data path. The actual time taken could be lesser than what
            is reported here. The value of -1 indicates that either the
            publishing is still in progress or the runtime status is UNKNOWN
            and hence not available. The Runtime status can be UNKNOWN if one
            or more hosts are down and the rules could not be sent to those
            hosts. When the host comes up, the runtime status will change to
            SUCCESS but the time taken for realization will show the value of
            the last realization time. Any new configuration change after this
            will start reflecting the proper value for
            time_taken_for_realization format: int64
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.operational_status = operational_status
        self.operational_status_error = operational_status_error
        self.publish_status = publish_status
        self.publish_status_error = publish_status_error
        self.publish_status_error_code = publish_status_error_code
        self.publish_status_error_details = publish_status_error_details
        self.publish_time = publish_time
        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.time_taken_for_realization = time_taken_for_realization
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'operational_status': type.OptionalType(type.StringType()),
        'operational_status_error': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
        'publish_status_error': type.OptionalType(type.StringType()),
        'publish_status_error_code': type.OptionalType(type.IntegerType()),
        'publish_status_error_details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'publish_time': type.OptionalType(type.IntegerType()),
        '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()),
        'time_taken_for_realization': type.OptionalType(type.IntegerType()),
        '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_: 
        :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 RecommendedFeaturePermission(VapiStruct):
    """
    Recommended Feature Permission

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



    _canonical_to_pep_names = {
                            'recommended_permissions': 'recommended_permissions',
                            'src_features': 'src_features',
                            'target_feature': 'target_feature',
                            }

    def __init__(self,
                 recommended_permissions=None,
                 src_features=None,
                 target_feature=None,
                ):
        """
        :type  recommended_permissions: :class:`list` of :class:`str` or ``None``
        :param recommended_permissions: Permission
        :type  src_features: :class:`list` of :class:`str` or ``None``
        :param src_features: List of source features
        :type  target_feature: :class:`str` or ``None``
        :param target_feature: Feature
        """
        self.recommended_permissions = recommended_permissions
        self.src_features = src_features
        self.target_feature = target_feature
        VapiStruct.__init__(self)


RecommendedFeaturePermission._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.recommended_feature_permission', {
        'recommended_permissions': type.OptionalType(type.ListType(type.StringType())),
        'src_features': type.OptionalType(type.ListType(type.StringType())),
        'target_feature': type.OptionalType(type.StringType()),
    },
    RecommendedFeaturePermission,
    False,
    None))



class RecommendedFeaturePermissionListResult(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_: 
        :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:`RecommendedFeaturePermission` 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)


RecommendedFeaturePermissionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.recommended_feature_permission_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__, 'RecommendedFeaturePermission'))),
    },
    RecommendedFeaturePermissionListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate the rule. Default is activated.
        :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 deactivated.
        :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. Instead of Layer 7 service profiles you can use a L7
            access profile. One of either Layer 7 service profiles or L7 Access
            Profile can be used in firewall rule. In case of L7 access profile
            only one is allowed.
        :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. Even
            though there is no limitation on length of a tag, internally tag
            will get truncated after 32 characters.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 RegTokenQuery(VapiStruct):
    """
    Registration token

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



    _canonical_to_pep_names = {
                            'token': 'token',
                            }

    def __init__(self,
                 token=None,
                ):
        """
        :type  token: :class:`str` or ``None``
        :param token: Get roles from registration token
        """
        self.token = token
        VapiStruct.__init__(self)


RegTokenQuery._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.reg_token_query', {
        'token': type.OptionalType(type.StringType()),
    },
    RegTokenQuery,
    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: 
        :type  related_attribute: :class:`RelatedAttribute` or ``None``
        :param 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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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: 
        :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 RemoteTunnelEndpoint(VapiStruct):
    """
    Remote tunnel endpoint

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



    _canonical_to_pep_names = {
                            'default_gateway': 'default_gateway',
                            'device_name': 'device_name',
                            'ip': 'ip',
                            'ipv6': 'ipv6',
                            'label': 'label',
                            'mac': 'mac',
                            'subnet_mask': 'subnet_mask',
                            'vlan': 'vlan',
                            }

    def __init__(self,
                 default_gateway=None,
                 device_name=None,
                 ip=None,
                 ipv6=None,
                 label=None,
                 mac=None,
                 subnet_mask=None,
                 vlan=None,
                ):
        """
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Gateway 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.
        :type  device_name: :class:`str` or ``None``
        :param device_name: Name of the virtual tunnel endpoint
            This 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: :class:`str` or ``None``
        :param ip: Depending upon the EndpointIpConfig used in HostSwitch, IP could be
            allocated either from DHCP (default) or from Static IP 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.
        :type  ipv6: :class:`IPv6EndPoint` or ``None``
        :param ipv6: 
        :type  label: :class:`long` or ``None``
        :param label: Unique label for this Endpoint 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: :class:`str` or ``None``
        :param mac: MAC address 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  subnet_mask: :class:`str` or ``None``
        :param subnet_mask: Subnet mask 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  vlan: :class:`long` or ``None``
        :param vlan: Vlan id format: int64
            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.default_gateway = default_gateway
        self.device_name = device_name
        self.ip = ip
        self.ipv6 = ipv6
        self.label = label
        self.mac = mac
        self.subnet_mask = subnet_mask
        self.vlan = vlan
        VapiStruct.__init__(self)


RemoteTunnelEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.remote_tunnel_endpoint', {
        'default_gateway': type.OptionalType(type.StringType()),
        'device_name': type.OptionalType(type.StringType()),
        'ip': type.OptionalType(type.StringType()),
        'ipv6': type.OptionalType(type.ReferenceType(__name__, 'IPv6EndPoint')),
        'label': type.OptionalType(type.IntegerType()),
        'mac': type.OptionalType(type.StringType()),
        'subnet_mask': type.OptionalType(type.StringType()),
        'vlan': type.OptionalType(type.IntegerType()),
    },
    RemoteTunnelEndpoint,
    False,
    None))



class RemoteTunnelEndpointConfigState(VapiStruct):
    """
    Remote tunnel endpoint configuration state

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



    _canonical_to_pep_names = {
                            'endpoints': 'endpoints',
                            }

    def __init__(self,
                 endpoints=None,
                ):
        """
        :type  endpoints: :class:`list` of :class:`RemoteTunnelEndpoint` or ``None``
        :param endpoints: List of remote tunnel endpoints which are configured on this 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.endpoints = endpoints
        VapiStruct.__init__(self)


RemoteTunnelEndpointConfigState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.remote_tunnel_endpoint_config_state', {
        'endpoints': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RemoteTunnelEndpoint'))),
    },
    RemoteTunnelEndpointConfigState,
    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.
    """



    _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: 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_: 
        """
        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 ResourceAllocation(VapiStruct):
    """
    Specify limit, shares and reservation for all kinds of traffic. Values for
    limit and reservation are expressed in percentage. And for shares, the
    value is expressed as a number between 1-100. The overall reservation among
    all traffic types should not exceed 75%. Otherwise, the API request will be
    rejected.

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



    _canonical_to_pep_names = {
                            'limit': 'limit',
                            'reservation': 'reservation',
                            'shares': 'shares',
                            'traffic_type': 'traffic_type',
                            }

    def __init__(self,
                 limit=None,
                 reservation=None,
                 shares=None,
                 traffic_type=None,
                ):
        """
        :type  limit: :class:`float` or ``None``
        :param limit: The limit property specifies the maximum bandwidth allocation for a
            given traffic type and is expressed in percentage. The default
            value for this field is set to -1 which means the traffic is
            unbounded for the traffic type. All other negative values for this
            property is not supported and will be rejected by the API.
        :type  reservation: :class:`float` or ``None``
        :param reservation: Minimum guaranteed bandwidth percentage
        :type  shares: :class:`long` or ``None``
        :param shares: Shares format: int32
        :type  traffic_type: :class:`HostInfraTrafficType` or ``None``
        :param traffic_type: 
        """
        self.limit = limit
        self.reservation = reservation
        self.shares = shares
        self.traffic_type = traffic_type
        VapiStruct.__init__(self)


ResourceAllocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_allocation', {
        'limit': type.OptionalType(type.DoubleType()),
        'reservation': type.OptionalType(type.DoubleType()),
        'shares': type.OptionalType(type.IntegerType()),
        'traffic_type': type.OptionalType(type.ReferenceType(__name__, 'HostInfraTrafficType')),
    },
    ResourceAllocation,
    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_: 
        :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 ResourceObject(VapiStruct):
    """
    A ResourceObject contains the path and properties of the resource that
    needs to be shared.

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



    _canonical_to_pep_names = {
                            'include_children': 'include_children',
                            'resource_path': 'resource_path',
                            }

    def __init__(self,
                 include_children=None,
                 resource_path=None,
                ):
        """
        :type  include_children: :class:`bool` or ``None``
        :param include_children: Whether the children of the shared resource_path are shared (true)
            or just the entity represented by the path is shared (false). The
            default value is false.
        :type  resource_path: :class:`str` or ``None``
        :param resource_path: Represents the path of the resource to be shared. The entity
            represented by this shared resources is shared with all the Orgs or
            Projects contexts that the Share container references.
        """
        self.include_children = include_children
        self.resource_path = resource_path
        VapiStruct.__init__(self)


ResourceObject._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_object', {
        'include_children': type.OptionalType(type.BooleanType()),
        'resource_path': type.OptionalType(type.StringType()),
    },
    ResourceObject,
    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: 
        """
        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 RetryProjectsOnboardingRequestParameters(VapiStruct):
    """
    List of projects for retrying projects onboarding.

    .. 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',
                            'projects': 'projects',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 projects=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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  projects: :class:`list` of :class:`str` or ``None``
        :param projects: Takes a list of project_ids of projects which were not successfully
            created on NsxPlus by the project service during onboarding
        """
        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.projects = projects
        VapiStruct.__init__(self)


RetryProjectsOnboardingRequestParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.retry_projects_onboarding_request_parameters', {
        '_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()),
        'projects': type.OptionalType(type.ListType(type.StringType())),
    },
    RetryProjectsOnboardingRequestParameters,
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain 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 RoleAssignmentPermissionConfig(VapiStruct):
    """
    Configuration that controls whether project admins and VPC admins can do
    role assignment to other users.

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



    _canonical_to_pep_names = {
                            'allow_role_assignment': 'allow_role_assignment',
                            }

    def __init__(self,
                 allow_role_assignment=None,
                ):
        """
        :type  allow_role_assignment: :class:`bool` or ``None``
        :param allow_role_assignment: Specifies whether user with this role is allowed to assign roles to
            other users.
        """
        self.allow_role_assignment = allow_role_assignment
        VapiStruct.__init__(self)


RoleAssignmentPermissionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.role_assignment_permission_config', {
        'allow_role_assignment': type.OptionalType(type.BooleanType()),
    },
    RoleAssignmentPermissionConfig,
    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"
    """


    """
    IDENTITY_SOURCE_TYPE_OIDC = "OIDC"
    """


    """
    IDENTITY_SOURCE_TYPE_CSP = "CSP"
    """


    """
    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"
    """


    """
    TYPE_REMOTE = "remote"
    """


    """



    _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',
                            'read_roles_for_paths': 'read_roles_for_paths',
                            'roles': 'roles',
                            'roles_for_paths': 'roles_for_paths',
                            'stale': 'stale',
                            'type': 'type',
                            'user_id': 'user_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,
                 identity_source_id=None,
                 identity_source_type=None,
                 name=None,
                 read_roles_for_paths=None,
                 roles=None,
                 roles_for_paths=None,
                 stale=None,
                 type=None,
                 user_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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 and OIDC 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`
            * :attr:`RoleBinding.IDENTITY_SOURCE_TYPE_OIDC`
            * :attr:`RoleBinding.IDENTITY_SOURCE_TYPE_CSP`
            
            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  read_roles_for_paths: :class:`bool` or ``None``
        :param read_roles_for_paths: Set this property to true to cause the user's role definition to be
            read from the roles_for_paths property. Set it to false to cause
            the user's role definition to be read from the roles property.
        :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.

            .. deprecated:: unknown
        :type  roles_for_paths: :class:`list` of :class:`RolesForPath` or ``None``
        :param roles_for_paths: The roles that are associated with the user, limiting them to a
            path. In case the path is '/', the roles apply everywhere i.e. it
            is same as the deprecated property roles.
        :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`
            * :attr:`RoleBinding.TYPE_REMOTE`
            
            Indicates the type of the user. remote_user - This is a user which
            is external to NSX. remote_group - This is a group of users which
            is external to NSX. local_user - This is a user local to NSX. These
            are linux users. principal_identity - This is a principal identity
            user. remote - The the principal is remote but whether it is a user
            or group is not known. Currently this is applicable only to LDAP
            identity_source_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  user_id: :class:`str` or ``None``
        :param user_id: Local user's numeric id on 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.identity_source_id = identity_source_id
        self.identity_source_type = identity_source_type
        self.name = name
        self.read_roles_for_paths = read_roles_for_paths
        self.roles = roles
        self.roles_for_paths = roles_for_paths
        self.stale = stale
        self.type = type
        self.user_id = user_id
        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()),
        'read_roles_for_paths': type.OptionalType(type.BooleanType()),
        'roles': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Role'))),
        'roles_for_paths': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RolesForPath'))),
        'stale': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
        'user_id': 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_: 
        :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_: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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_: 
        :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 RolesForPath(VapiStruct):
    """
    The roles that are limited only to the path specified. In case the path is
    null, the roles apply everywhere.

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



    _canonical_to_pep_names = {
                            'delete_path': 'delete_path',
                            'path': 'path',
                            'roles': 'roles',
                            }

    def __init__(self,
                 delete_path=None,
                 path=None,
                 roles=None,
                ):
        """
        :type  delete_path: :class:`bool` or ``None``
        :param delete_path: Flag to delete the path in role-binding update operation. If false
            then path will not be deleted while updating the role-binding. If
            true then path will be deleted while updating the role-binding.
            Please note: This flag will be used only in role-binding PUT api.
        :type  path: :class:`str` or ``None``
        :param path: Path of the entity in parent hierarchy.
        :type  roles: :class:`list` of :class:`Role` or ``None``
        :param roles: Applicable roles.
        """
        self.delete_path = delete_path
        self.path = path
        self.roles = roles
        VapiStruct.__init__(self)


RolesForPath._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.roles_for_path', {
        'delete_path': type.OptionalType(type.BooleanType()),
        'path': type.OptionalType(type.StringType()),
        'roles': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Role'))),
    },
    RolesForPath,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'site_overrides': 'site_overrides',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 site_overrides=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 field is deprecated and recommended to change
            Rule action field. Note that this field is not synchornied with
            default rule field.

            .. deprecated:: unknown
        :type  tunnel_interfaces: :class:`list` of :class:`IPSecVpnTunnelInterface` or ``None``
        :param tunnel_interfaces: IP Tunnel interfaces. This property is mandatory on LM. It is
            required on GM only in case of site_overrides property not
            provided.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. This property is mandatory
            on LM. It is required on GM only in case of site_overrides property
            not provided.
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Public IPV4 or IPV6 address of the remote device terminating the
            VPN connection. This property is mandatory on LM. It is required on
            GM only in case of site_overrides property not provided. Please
            note that configuring peer_address as IPv6 address is not supported
            in the deprecated IPSecVpnSession Patch/PUT APIs. format: ip
        :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. This property is mandatory on LM. It is required on GM
            only in case of site_overrides property not provided.
        :type  psk: :class:`str` or ``None``
        :param psk: IPSec Pre-shared key. Maximum length of this field is 128
            characters.
        :type  site_overrides: :class:`list` of :class:`SiteOverride` or ``None``
        :param site_overrides: A collection of site specific attributes specificed only on GM
        :type  tcp_mss_clamping: :class:`TcpMaximumSegmentSizeClamping` or ``None``
        :param tcp_mss_clamping: 
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.site_overrides = site_overrides
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'site_overrides': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteOverride'))),
        '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.

            .. deprecated:: unknown
        :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: 
        """
        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. Should not be
            provided while creating routes under VPC.
        """
        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',
                            'black_hole': 'black_hole',
                            'interface': '_interface',
                            'lr_component_id': 'lr_component_id',
                            'lr_component_type': 'lr_component_type',
                            'network': 'network',
                            'next_hop': 'next_hop',
                            'next_hop_gateway': 'next_hop_gateway',
                            'route_type': 'route_type',
                            }

    def __init__(self,
                 admin_distance=None,
                 black_hole=None,
                 _interface=None,
                 lr_component_id=None,
                 lr_component_type=None,
                 network=None,
                 next_hop=None,
                 next_hop_gateway=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  black_hole: :class:`bool` or ``None``
        :param black_hole: Value of this field will be true if given routes are null routes
            This 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  next_hop_gateway: :class:`str` or ``None``
        :param next_hop_gateway: Next hop gateway path
        :type  route_type: :class:`str` or ``None``
        :param route_type: Route type in routing table. t0c - Tier-0 Connected t0s - Tier-0
            Static b - BGP t0n - Tier-0 NAT t1s - Tier-1 Static t1c - Tier-1
            Connected t1n: Tier-1 NAT t1l: Tier-1 LB VIP t1ls: Tier-1 LB SNAT
            t1d: Tier-1 DNS FORWARDER t1ipsec: Tier-1 IPSec isr: Inter-SR
            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.black_hole = black_hole
        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.next_hop_gateway = next_hop_gateway
        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()),
        'black_hole': type.OptionalType(type.BooleanType()),
        '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()),
        'next_hop_gateway': 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.
    """
    STATUS_SUCCESS = "SUCCESS"
    """


    """
    STATUS_FAILURE = "FAILURE"
    """


    """
    STATUS_NOT_FOUND = "NOT_FOUND"
    """


    """



    _canonical_to_pep_names = {
                            'count': 'count',
                            'edge_node': 'edge_node',
                            'error_message': 'error_message',
                            'route_entries': 'route_entries',
                            'status': 'status',
                            }

    def __init__(self,
                 count=None,
                 edge_node=None,
                 error_message=None,
                 route_entries=None,
                 status=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  error_message: :class:`str` or ``None``
        :param error_message: Routing table fetch error message, populated only if status if
            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  route_entries: :class:`list` of :class:`RoutingEntry` or ``None``
        :param route_entries: Route entries.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`RoutingTable.STATUS_SUCCESS`
            * :attr:`RoutingTable.STATUS_FAILURE`
            * :attr:`RoutingTable.STATUS_NOT_FOUND`
            
            Routing table fetch status from 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.count = count
        self.edge_node = edge_node
        self.error_message = error_message
        self.route_entries = route_entries
        self.status = status
        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()),
        'error_message': type.OptionalType(type.StringType()),
        'route_entries': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RoutingEntry'))),
        'status': type.OptionalType(type.StringType()),
    },
    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_: 
        :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 RpAddressMulticastRanges(VapiStruct):
    """
    Static IPv4 multicast address and assciated multicast group ranges.

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



    _canonical_to_pep_names = {
                            'multicast_ranges': 'multicast_ranges',
                            'rp_address': 'rp_address',
                            }

    def __init__(self,
                 multicast_ranges=None,
                 rp_address=None,
                ):
        """
        :type  multicast_ranges: :class:`list` of :class:`str` or ``None``
        :param multicast_ranges: Assciated multicast group ranges configuration. format:
            ip-cidr-block
        :type  rp_address: :class:`str` or ``None``
        :param rp_address: Static IPv4 multicast address configuration. format: ip
        """
        self.multicast_ranges = multicast_ranges
        self.rp_address = rp_address
        VapiStruct.__init__(self)


RpAddressMulticastRanges._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.rp_address_multicast_ranges', {
        'multicast_ranges': type.OptionalType(type.ListType(type.StringType())),
        'rp_address': type.OptionalType(type.StringType()),
    },
    RpAddressMulticastRanges,
    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"
    """


    """
    ACTION_JUMP_TO_APPLICATION = "JUMP_TO_APPLICATION"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 deactivate the rule. Default is activated.
        :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 deactivated.
        :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. Instead of Layer 7 service profiles you can use a L7
            access profile. One of either Layer 7 service profiles or L7 Access
            Profile can be used in firewall rule. In case of L7 access profile
            only one is allowed.
        :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. Even
            though there is no limitation on length of a tag, internally tag
            will get truncated after 32 characters.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`Rule.ACTION_ALLOW`
            * :attr:`Rule.ACTION_DROP`
            * :attr:`Rule.ACTION_REJECT`
            * :attr:`Rule.ACTION_JUMP_TO_APPLICATION`
            
            The action to be applied to all the services The
            JUMP_TO_APPLICATION action is only supported for rules created in
            the Environment category. Once a match is hit then the rule
            processing will jump to the rules present in the Application
            category, skipping all further rules in the Environment category.
            If no rules match in the Application category then the default
            application rule will be hit. This is applicable only for DFW.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'l7_accept_count': 'l7_accept_count',
                            'l7_reject_count': 'l7_reject_count',
                            'l7_reject_with_response_count': 'l7_reject_with_response_count',
                            '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,
                 l7_accept_count=None,
                 l7_reject_count=None,
                 l7_reject_with_response_count=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_: 
        :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  l7_accept_count: :class:`long` or ``None``
        :param l7_accept_count: Aggregated number of L7 Profile Accepted counters 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  l7_reject_count: :class:`long` or ``None``
        :param l7_reject_count: Aggregated number of L7 Profile Rejected counters 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  l7_reject_with_response_count: :class:`long` or ``None``
        :param l7_reject_with_response_count: Aggregated number of L7 Profile Rejected with Response counters
            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  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.l7_accept_count = l7_accept_count
        self.l7_reject_count = l7_reject_count
        self.l7_reject_with_response_count = l7_reject_with_response_count
        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()),
        'l7_accept_count': type.OptionalType(type.IntegerType()),
        'l7_reject_count': type.OptionalType(type.IntegerType()),
        'l7_reject_with_response_count': type.OptionalType(type.IntegerType()),
        '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 = {
                            'container_cluster_path': 'container_cluster_path',
                            'enforcement_point': 'enforcement_point',
                            'statistics': 'statistics',
                            }

    def __init__(self,
                 container_cluster_path=None,
                 enforcement_point=None,
                 statistics=None,
                ):
        """
        :type  container_cluster_path: :class:`str` or ``None``
        :param container_cluster_path: Rule statistics for a single container 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.
        :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: 
        """
        self.container_cluster_path = container_cluster_path
        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', {
        'container_cluster_path': type.OptionalType(type.StringType()),
        '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_: 
        :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 SamplingArgument(VapiStruct):
    """


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

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

    """
    SAMPLING_TYPE_FIRSTNSAMPLING = "FirstNSampling"
    """


    """
    SAMPLING_TYPE_PACKETNUMBERSAMPLING = "PacketNumberSampling"
    """


    """
    SAMPLING_TYPE_INTERVALSAMPLING = "IntervalSampling"
    """


    """



    _canonical_to_pep_names = {
                            'sampling_type': 'sampling_type',
                            }

    def __init__(self,
                 sampling_type='SamplingArgument',
                ):
        """
        :type  sampling_type: :class:`str`
        :param sampling_type: Possible values are: 
            
            * :attr:`SamplingArgument.SAMPLING_TYPE_FIRSTNSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_PACKETNUMBERSAMPLING`
            * :attr:`SamplingArgument.SAMPLING_TYPE_INTERVALSAMPLING`
            
            Sampling type
        """
        self._sampling_type = sampling_type
        VapiStruct.__init__(self)

    @property
    def sampling_type(self):
        """
        Return the discriminator value
        """
        return self._sampling_type

SamplingArgument._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sampling_argument', {
        'sampling_type': type.StringType(),
    },
    SamplingArgument,
    False,
    None))



class SandboxedResource(VapiStruct):
    """
    Sandbox resource

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'alarms': 'alarms',
                            'intent_path': 'intent_path',
                            'local_entity_paths': 'local_entity_paths',
                            'number_of_reference_path': 'number_of_reference_path',
                            'referenced_paths': 'referenced_paths',
                            'site_id': 'site_id',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 alarms=None,
                 intent_path=None,
                 local_entity_paths=None,
                 number_of_reference_path=None,
                 referenced_paths=None,
                 site_id=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path
        :type  local_entity_paths: :class:`list` of :class:`str` or ``None``
        :param local_entity_paths: Local Entity Paths
        :type  number_of_reference_path: :class:`long` or ``None``
        :param number_of_reference_path: Number of reference path format: int64
        :type  referenced_paths: :class:`list` of :class:`str` or ``None``
        :param referenced_paths: Referenced Paths
        :type  site_id: :class:`str` or ``None``
        :param site_id: Site Id
        :type  site_path: :class:`str` or ``None``
        :param site_path: Site 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.alarms = alarms
        self.intent_path = intent_path
        self.local_entity_paths = local_entity_paths
        self.number_of_reference_path = number_of_reference_path
        self.referenced_paths = referenced_paths
        self.site_id = site_id
        self.site_path = site_path
        VapiStruct.__init__(self)


SandboxedResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sandboxed_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_path': type.OptionalType(type.StringType()),
        'local_entity_paths': type.OptionalType(type.ListType(type.StringType())),
        'number_of_reference_path': type.OptionalType(type.IntegerType()),
        'referenced_paths': type.OptionalType(type.ListType(type.StringType())),
        'site_id': type.OptionalType(type.StringType()),
        'site_path': type.OptionalType(type.StringType()),
    },
    SandboxedResource,
    False,
    None))



class SandboxedResourceListResult(VapiStruct):
    """
    Sandbox resource 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_: 
        :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:`SandboxedResource` or ``None``
        :param results: list of sandbox 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.
        """
        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)


SandboxedResourceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sandboxed_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__, 'SandboxedResource'))),
    },
    SandboxedResourceListResult,
    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_: 
        :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 SecurityFeature(VapiStruct):
    """
    T1 Security feature entity with feature details

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


    """
    FEATURE_IDFW = "IDFW"
    """


    """
    FEATURE_IDPS = "IDPS"
    """


    """
    FEATURE_TLS = "TLS"
    """


    """



    _canonical_to_pep_names = {
                            'enable': 'enable',
                            'feature': 'feature',
                            }

    def __init__(self,
                 enable=None,
                 feature=None,
                ):
        """
        :type  enable: :class:`bool` or ``None``
        :param enable: true - activate the feature, false - deactivate the feture
        :type  feature: :class:`str` or ``None``
        :param feature: Possible values are: 
            
            * :attr:`SecurityFeature.FEATURE_MALWAREPREVENTION`
            * :attr:`SecurityFeature.FEATURE_IDFW`
            * :attr:`SecurityFeature.FEATURE_IDPS`
            * :attr:`SecurityFeature.FEATURE_TLS`
            
            Feature to be activated/deactivated. IDPS - Intrusion Detection
            System TLS - Transport Layer Security Inspection MALWAREPREVENTION
            - Malware Prevention Use any one of this to enable/disabe it.
        """
        self.enable = enable
        self.feature = feature
        VapiStruct.__init__(self)


SecurityFeature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_feature', {
        'enable': type.OptionalType(type.BooleanType()),
        'feature': type.OptionalType(type.StringType()),
    },
    SecurityFeature,
    False,
    None))



class SecurityFeatureBase(VapiStruct):
    """
    Security Feature feature entity

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



    _canonical_to_pep_names = {
                            'enable': 'enable',
                            }

    def __init__(self,
                 enable=None,
                ):
        """
        :type  enable: :class:`bool` or ``None``
        :param enable: true - activate the feature, false - deactivate the feture
        """
        self.enable = enable
        VapiStruct.__init__(self)


SecurityFeatureBase._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_feature_base', {
        'enable': type.OptionalType(type.BooleanType()),
    },
    SecurityFeatureBase,
    False,
    None))



class SecurityFeatures(VapiStruct):
    """
    T1 Security features entity with feature details

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'features': 'features',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 features=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  features: :class:`list` of :class:`SecurityFeature` or ``None``
        :param features: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.features = features
        VapiStruct.__init__(self)


SecurityFeatures._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'features': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SecurityFeature'))),
    },
    SecurityFeatures,
    False,
    None))



class SecurityPolicy(VapiStruct):
    """
    Ordered list of Rules.

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


    """
    CONNECTIVITY_PREFERENCE_DENYLIST = "DENYLIST"
    """


    """
    CONNECTIVITY_PREFERENCE_ALLOWLIST_ENABLE_LOGGING = "ALLOWLIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_PREFERENCE_DENYLIST_ENABLE_LOGGING = "DENYLIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_PREFERENCE_NONE = "NONE"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'application_connectivity_strategy': 'application_connectivity_strategy',
                            'connectivity_preference': 'connectivity_preference',
                            'connectivity_strategy': 'connectivity_strategy',
                            'default_rule_id': 'default_rule_id',
                            'logging_enabled': 'logging_enabled',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 application_connectivity_strategy=None,
                 connectivity_preference=None,
                 connectivity_strategy=None,
                 default_rule_id=None,
                 logging_enabled=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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  application_connectivity_strategy: :class:`list` of :class:`ApplicationConnectivityStrategy` or ``None``
        :param application_connectivity_strategy: This field indicates the application connectivity policy for the
            security policy.
        :type  connectivity_preference: :class:`str` or ``None``
        :param connectivity_preference: Possible values are: 
            
            * :attr:`SecurityPolicy.CONNECTIVITY_PREFERENCE_ALLOWLIST`
            * :attr:`SecurityPolicy.CONNECTIVITY_PREFERENCE_DENYLIST`
            *
              :attr:`SecurityPolicy.CONNECTIVITY_PREFERENCE_ALLOWLIST_ENABLE_LOGGING`
            *
              :attr:`SecurityPolicy.CONNECTIVITY_PREFERENCE_DENYLIST_ENABLE_LOGGING`
            * :attr:`SecurityPolicy.CONNECTIVITY_PREFERENCE_NONE`
            
            This field indicates the default connectivity policy for the
            security policy. Based on the connectivity preference, 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 preference. If NONE is selected or no connectivity
            preference 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_preference 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. ALLOWLIST - Adds a default drop rule.
            Administrator can then use \"allow\" rules to allow traffic between
            groups DENYLIST - Adds a default allow rule. Admin can then use
            \"drop\" rules to block traffic between groups
            ALLOWLIST_ENABLE_LOGGING - Allowlisting with logging enabled
            DENYLIST_ENABLE_LOGGING - Denylisting with logging enabled NONE -
            No default rule is created.
        :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 connectivity 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.
            This property is deprecated. Use the type connectivity_preference
            instead. 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.

            .. deprecated:: unknown
        :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  logging_enabled: :class:`bool` or ``None``
        :param logging_enabled: This property is deprecated. Flag to enable logging for all the
            rules in the security policy. If the value is true then logging
            will be enabled for all the rules in the security policy. If the
            value is false, then the rule level logging value will be honored.

            .. deprecated:: unknown
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.application_connectivity_strategy = application_connectivity_strategy
        self.connectivity_preference = connectivity_preference
        self.connectivity_strategy = connectivity_strategy
        self.default_rule_id = default_rule_id
        self.logging_enabled = logging_enabled
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'application_connectivity_strategy': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ApplicationConnectivityStrategy'))),
        'connectivity_preference': type.OptionalType(type.StringType()),
        'connectivity_strategy': type.OptionalType(type.StringType()),
        'default_rule_id': type.OptionalType(type.IntegerType()),
        'logging_enabled': type.OptionalType(type.BooleanType()),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Rule'))),
    },
    SecurityPolicy,
    False,
    None))



class SecurityPolicyContainerCluster(VapiStruct):
    """
    Indicates the container cluster where the security policy will be realized.

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


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'container_cluster_path': 'container_cluster_path',
                            'container_cluster_type': 'container_cluster_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 container_cluster_path=None,
                 container_cluster_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  container_cluster_path: :class:`str` or ``None``
        :param container_cluster_path: Path to the container cluster entity in NSX
        :type  container_cluster_type: :class:`str` or ``None``
        :param container_cluster_type: Possible values are: 
            
            *
              :attr:`SecurityPolicyContainerCluster.CONTAINER_CLUSTER_TYPE_ANTREA`
            
            Type of the container cluster where the security policy will be
            realized
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.container_cluster_path = container_cluster_path
        self.container_cluster_type = container_cluster_type
        VapiStruct.__init__(self)


SecurityPolicyContainerCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_policy_container_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'container_cluster_path': type.OptionalType(type.StringType()),
        'container_cluster_type': type.OptionalType(type.StringType()),
    },
    SecurityPolicyContainerCluster,
    False,
    None))



class SecurityPolicyContainerClusterListResult(VapiStruct):
    """
    Paged Collection of Security Policy Container Clusters

    .. 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_: 
        :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:`SecurityPolicyContainerCluster` or ``None``
        :param results: List of container clusters for a security policy
        """
        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)


SecurityPolicyContainerClusterListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_policy_container_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__, 'SecurityPolicyContainerCluster'))),
    },
    SecurityPolicyContainerClusterListResult,
    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_: 
        :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 = {
                            'container_cluster_path': 'container_cluster_path',
                            'enforcement_point': 'enforcement_point',
                            'statistics': 'statistics',
                            }

    def __init__(self,
                 container_cluster_path=None,
                 enforcement_point=None,
                 statistics=None,
                ):
        """
        :type  container_cluster_path: :class:`str` or ``None``
        :param container_cluster_path: Security Policy statistics for a single container 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.
        :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: 
        """
        self.container_cluster_path = container_cluster_path
        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', {
        'container_cluster_path': type.OptionalType(type.StringType()),
        '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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'evpn_segment': 'evpn_segment',
                            'evpn_tenant_config_path': 'evpn_tenant_config_path',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 evpn_segment=None,
                 evpn_tenant_config_path=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. This field is
            deprecated and will be removed in a future release. Please use
            address_bindings in SegmentPort to configure static bindings.

            .. deprecated:: unknown
        :type  admin_state: :class:`str` or ``None``
        :param admin_state: Possible values are: 
            
            * :attr:`Segment.ADMIN_STATE_UP`
            * :attr:`Segment.ADMIN_STATE_DOWN`
            
            Admin state represents desired state of segment. It does not
            reflect the state of other logical entities connected/attached to
            the segment.
        :type  advanced_config: :class:`SegmentAdvancedConfig` or ``None``
        :param advanced_config: 
        :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 or label of type
            Tier0. Valid only for segments created under Infra. This field can
            only be used for overlay segments. VLAN backed segments cannot have
            connectivity path set.
        :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  evpn_segment: :class:`bool` or ``None``
        :param evpn_segment: Flag to indicate if the Segment is a Child-Segment of type EVPN.
            This 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_tenant_config_path: :class:`str` or ``None``
        :param evpn_tenant_config_path: Policy path to the EvpnTenantConfig resource. Supported only for
            Route-Server Evpn Mode. Supported only for Overlay Segments. This
            will be populated for both Parent and Child segments participating
            in Evpn Route-Server Mode.
        :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: 
        :type  l2_extension: :class:`L2Extension` or ``None``
        :param l2_extension: 
        :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.

            .. deprecated:: unknown
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.evpn_segment = evpn_segment
        self.evpn_tenant_config_path = evpn_tenant_config_path
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'evpn_segment': type.OptionalType(type.BooleanType()),
        'evpn_tenant_config_path': 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"
    """


    """
    ORIGIN_TYPE_VCENTER = "VCENTER"
    """


    """
    URPF_MODE_NONE = "NONE"
    """


    """
    URPF_MODE_STRICT = "STRICT"
    """


    """



    _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',
                            'ndra_profile_path': 'ndra_profile_path',
                            'node_local_switch': 'node_local_switch',
                            'origin_id': 'origin_id',
                            'origin_type': 'origin_type',
                            'uplink_teaming_policy_name': 'uplink_teaming_policy_name',
                            'urpf_mode': 'urpf_mode',
                            }

    def __init__(self,
                 connectivity=None,
                 address_pool_paths=None,
                 hybrid=None,
                 inter_router=None,
                 local_egress=None,
                 local_egress_routing_policies=None,
                 multicast=None,
                 ndra_profile_path=None,
                 node_local_switch=None,
                 origin_id=None,
                 origin_type=None,
                 uplink_teaming_policy_name=None,
                 urpf_mode=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) Tier-0/Tier1 segment from corresponding gateway. This
            property does not apply to VLAN backed segments. VLAN backed
            segments with connectivity OFF does not affect its layer-2
            connectivity.
        :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 on the downlink LRP created to connect the segment
            to Tier0/Tier1 gateway.
        :type  ndra_profile_path: :class:`str` or ``None``
        :param ndra_profile_path: This profile is applie dto the downlink logical router port created
            while attaching this semgnet to tier-0 or tier-1. If this field is
            empty, NDRA profile of the router is applied to the newly created
            port.
        :type  node_local_switch: :class:`bool` or ``None``
        :param node_local_switch: A behaviour required for Firewall As A Service (FaaS) where the
            segment BUM traffic is confined within the edge node that this
            segment belongs to.
        :type  origin_id: :class:`str` or ``None``
        :param origin_id: ID populated by NSX when NSX on DVPG is used to indicate the source
            DVPG. Currently, only DVPortgroups are identified as Discovered
            Segments. The origin_id is the identifier of DVPortgroup from the
            source vCenter server.
        :type  origin_type: :class:`str` or ``None``
        :param origin_type: Possible values are: 
            
            * :attr:`SegmentAdvancedConfig.ORIGIN_TYPE_VCENTER`
            
            The type of source from where the DVPortgroup is discovered
        :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.
        :type  urpf_mode: :class:`str` or ``None``
        :param urpf_mode: Possible values are: 
            
            * :attr:`SegmentAdvancedConfig.URPF_MODE_NONE`
            * :attr:`SegmentAdvancedConfig.URPF_MODE_STRICT`
            
            This URPF mode is applied to the downlink logical router port
            created while attaching this segment to tier-0 or tier-1.
        """
        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.ndra_profile_path = ndra_profile_path
        self.node_local_switch = node_local_switch
        self.origin_id = origin_id
        self.origin_type = origin_type
        self.uplink_teaming_policy_name = uplink_teaming_policy_name
        self.urpf_mode = urpf_mode
        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()),
        'ndra_profile_path': type.OptionalType(type.StringType()),
        'node_local_switch': type.OptionalType(type.BooleanType()),
        'origin_id': type.OptionalType(type.StringType()),
        'origin_type': type.OptionalType(type.StringType()),
        'uplink_teaming_policy_name': type.OptionalType(type.StringType()),
        'urpf_mode': type.OptionalType(type.StringType()),
    },
    SegmentAdvancedConfig,
    False,
    None))



class SegmentConfigurationState(VapiStruct):
    """
    Segment state on specific Enforcement Point. The details section in
    SegmentConfigurationState contains the list of out of sync hosts which are
    present in the transport zone that is associated with the segment. Out of
    Sync hosts are the host transport nodes which are not fully synced.

    .. 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"
    """


    """
    STATE_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """



    _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`
            * :attr:`SegmentConfigurationState.STATE_REPLACE_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`SegmentConfigurationState.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            *
              :attr:`SegmentConfigurationState.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            *
              :attr:`SegmentConfigurationState.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`SegmentConfigurationState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`SegmentConfigurationState.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`SegmentConfigurationState.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`SegmentConfigurationState.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`SegmentConfigurationState.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`SegmentConfigurationState.STATE_COMPUTE_MANAGER_NOT_FOUND`
            * :attr:`SegmentConfigurationState.STATE_DELETE_IN_PROGRESS`
            *
              :attr:`SegmentConfigurationState.STATE_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`SegmentConfigurationState.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`SegmentConfigurationState.STATE_MAINTENANCE_MODE_ENABLED`
            *
              :attr:`SegmentConfigurationState.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`SegmentConfigurationState.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            *
              :attr:`SegmentConfigurationState.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`SegmentConfigurationState.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            *
              :attr:`SegmentConfigurationState.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            *
              :attr:`SegmentConfigurationState.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            *
              :attr:`SegmentConfigurationState.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`SegmentConfigurationState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`SegmentConfigurationState.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`SegmentConfigurationState.STATE_REDEPLOY_ACTIVITY_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            *
              :attr:`SegmentConfigurationState.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            *
              :attr:`SegmentConfigurationState.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`SegmentConfigurationState.STATE_REPLACE_ACTIVITY_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            *
              :attr:`SegmentConfigurationState.STATE_REPLACE_ACTIVITY_SCHEDULED`
            *
              :attr:`SegmentConfigurationState.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`SegmentConfigurationState.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`SegmentConfigurationState.STATE_RETRYING_REPLACE`
            *
              :attr:`SegmentConfigurationState.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`SegmentConfigurationState.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`SegmentConfigurationState.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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 SegmentConfigurationStateListResult(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_: 
        :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:`SegmentConfigurationState` or ``None``
        :param results: Paged Collection of Segment State on specific 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)


SegmentConfigurationStateListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_configuration_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__, 'SegmentConfigurationState'))),
    },
    SegmentConfigurationStateListResult,
    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: 
        :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: 
        """
        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: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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: 
        """
        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_: 
        :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 SegmentMacAddressListResult(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',
                            'last_update_timestamp': 'last_update_timestamp',
                            'results': 'results',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 last_update_timestamp=None,
                 results=None,
                 transport_node_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_: 
        :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  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:`MacTableEntry` or ``None``
        :param results: 
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: Transport node 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.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


SegmentMacAddressListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_mac_address_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()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MacTableEntry'))),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    SegmentMacAddressListResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_UNBLOCKED_VLAN = "UNBLOCKED_VLAN"
    """


    """
    INIT_STATE_RESTORE_VIF = "RESTORE_VIF"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'origin_id': 'origin_id',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 origin_id=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :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_UNBLOCKED_VLAN`
            * :attr:`SegmentPort.INIT_STATE_RESTORE_VIF`
            
            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. 'RESTORE_VIF' fetches and restores VIF
            attachment from ESX host.
        :type  origin_id: :class:`str` or ``None``
        :param origin_id: ID populated by NSX when NSX on DVPG is used to indicate the source
            Distributed Virtual Port and the corresponding Distributed Virtual
            Switch. This ID is populated only for ports attached to discovered
            segments.
            This 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_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.origin_id = origin_id
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'origin_id': type.OptionalType(type.StringType()),
        'source_site_id': type.OptionalType(type.StringType()),
    },
    SegmentPort,
    False,
    None))



class SegmentPortAttachmentState(VapiStruct):
    """
    VIF attachment state of a segment port

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


    """
    STATE_ATTACHED = "ATTACHED"
    """


    """
    STATE_ATTACHED_PENDING_CONF = "ATTACHED_PENDING_CONF"
    """


    """
    STATE_ATTACHED_IN_MOTION = "ATTACHED_IN_MOTION"
    """


    """
    STATE_DETACHED = "DETACHED"
    """


    """



    _canonical_to_pep_names = {
                            'attachers': 'attachers',
                            'id': 'id',
                            'state': 'state',
                            }

    def __init__(self,
                 attachers=None,
                 id=None,
                 state=None,
                ):
        """
        :type  attachers: :class:`list` of :class:`PortAttacher` or ``None``
        :param attachers: VM or vmknic entities that are attached to the Segment 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  id: :class:`str` or ``None``
        :param id: VIF 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  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`SegmentPortAttachmentState.STATE_FREE`
            * :attr:`SegmentPortAttachmentState.STATE_ATTACHED`
            * :attr:`SegmentPortAttachmentState.STATE_ATTACHED_PENDING_CONF`
            * :attr:`SegmentPortAttachmentState.STATE_ATTACHED_IN_MOTION`
            * :attr:`SegmentPortAttachmentState.STATE_DETACHED`
            
            A segment port must be in one of following states. FREE - If there
            are no active attachers. The port may or may not have an attachment
            ID configured on it. This state is applicable only to port of
            static type. ATTACHED - Segment port has exactly one active
            attacher and no further configuration is pending.
            ATTACHED_PENDING_CONF - Segment port has exactly one attacher,
            however it may not have been configured completely. Additional
            configuration will be provided by other nsx components.
            ATTACHED_IN_MOTION - Segment port has multiple active attachers.
            This state represents a scenario where VM is moving from one
            location (host or storage) to another (e.g. vmotion, vSphere HA)
            DETACHED - A temporary state after all port attachers have been
            detached. This state is applicable only to a port of ephemeral type
            and the port will soon be 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.
        """
        self.attachers = attachers
        self.id = id
        self.state = state
        VapiStruct.__init__(self)


SegmentPortAttachmentState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_attachment_state', {
        'attachers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortAttacher'))),
        'id': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    SegmentPortAttachmentState,
    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_: 
        :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 SegmentPortMacAddressCsvListResult(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:`SegmentPortMacTableCsvEntry` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


SegmentPortMacAddressCsvListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_mac_address_csv_list_result', {
        'file_name': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentPortMacTableCsvEntry'))),
    },
    SegmentPortMacAddressCsvListResult,
    False,
    None))



class SegmentPortMacAddressListResult(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',
                            'last_update_timestamp': 'last_update_timestamp',
                            'results': 'results',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 last_update_timestamp=None,
                 results=None,
                 transport_node_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_: 
        :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  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:`SegmentPortMacTableEntry` or ``None``
        :param results: 
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: Transport node 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.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


SegmentPortMacAddressListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_mac_address_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()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentPortMacTableEntry'))),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    SegmentPortMacAddressListResult,
    False,
    None))



class SegmentPortMacTableCsvEntry(VapiStruct):
    """


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


    """
    MAC_TYPE_LEARNED = "LEARNED"
    """


    """



    _canonical_to_pep_names = {
                            'mac_address': 'mac_address',
                            'mac_type': 'mac_type',
                            }

    def __init__(self,
                 mac_address=None,
                 mac_type=None,
                ):
        """
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: The MAC address
        :type  mac_type: :class:`str` or ``None``
        :param mac_type: Possible values are: 
            
            * :attr:`SegmentPortMacTableCsvEntry.MAC_TYPE_STATIC`
            * :attr:`SegmentPortMacTableCsvEntry.MAC_TYPE_LEARNED`
            
            The type of the MAC address
        """
        self.mac_address = mac_address
        self.mac_type = mac_type
        VapiStruct.__init__(self)


SegmentPortMacTableCsvEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_mac_table_csv_entry', {
        'mac_address': type.OptionalType(type.StringType()),
        'mac_type': type.OptionalType(type.StringType()),
    },
    SegmentPortMacTableCsvEntry,
    False,
    None))



class SegmentPortMacTableEntry(VapiStruct):
    """


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


    """
    MAC_TYPE_LEARNED = "LEARNED"
    """


    """



    _canonical_to_pep_names = {
                            'mac_address': 'mac_address',
                            'mac_type': 'mac_type',
                            }

    def __init__(self,
                 mac_address=None,
                 mac_type=None,
                ):
        """
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: The MAC address
        :type  mac_type: :class:`str` or ``None``
        :param mac_type: Possible values are: 
            
            * :attr:`SegmentPortMacTableEntry.MAC_TYPE_STATIC`
            * :attr:`SegmentPortMacTableEntry.MAC_TYPE_LEARNED`
            
            The type of the MAC address
        """
        self.mac_address = mac_address
        self.mac_type = mac_type
        VapiStruct.__init__(self)


SegmentPortMacTableEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_mac_table_entry', {
        'mac_address': type.OptionalType(type.StringType()),
        'mac_type': type.OptionalType(type.StringType()),
    },
    SegmentPortMacTableEntry,
    False,
    None))



class SegmentPortState(VapiStruct):
    """
    Contains realized state of the segment port. For example: transport node on
    which the port is located, discovered and realized address bindings of the
    port.

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



    _canonical_to_pep_names = {
                            'attachment': 'attachment',
                            'discovered_bindings': 'discovered_bindings',
                            'duplicate_bindings': 'duplicate_bindings',
                            'realized_bindings': 'realized_bindings',
                            'transport_node_ids': 'transport_node_ids',
                            }

    def __init__(self,
                 attachment=None,
                 discovered_bindings=None,
                 duplicate_bindings=None,
                 realized_bindings=None,
                 transport_node_ids=None,
                ):
        """
        :type  attachment: :class:`SegmentPortAttachmentState` or ``None``
        :param attachment: 
        :type  discovered_bindings: :class:`list` of :class:`AddressBindingEntry` or ``None``
        :param discovered_bindings: Contains the list of address bindings for a segment port that were
            automatically dicovered using various snooping methods like ARP,
            DHCP etc.
        :type  duplicate_bindings: :class:`list` of :class:`DuplicateAddressBindingEntry` or ``None``
        :param duplicate_bindings: If any address binding discovered on the port is also found on
            other port on the same segment, then it is included in the
            duplicate bindings list along with the ID of the port with which it
            conflicts.
        :type  realized_bindings: :class:`list` of :class:`AddressBindingEntry` or ``None``
        :param realized_bindings: List of segment port bindings that are realized. This list may be
            populated from the discovered bindings or manual user specified
            bindings. This binding configuration can be used by features such
            as firewall, spoof-guard, traceflow etc.
        :type  transport_node_ids: :class:`list` of :class:`str` or ``None``
        :param transport_node_ids: Identifiers of the transport nodes where the port is located
        """
        self.attachment = attachment
        self.discovered_bindings = discovered_bindings
        self.duplicate_bindings = duplicate_bindings
        self.realized_bindings = realized_bindings
        self.transport_node_ids = transport_node_ids
        VapiStruct.__init__(self)


SegmentPortState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_state', {
        'attachment': type.OptionalType(type.ReferenceType(__name__, 'SegmentPortAttachmentState')),
        'discovered_bindings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AddressBindingEntry'))),
        'duplicate_bindings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DuplicateAddressBindingEntry'))),
        'realized_bindings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AddressBindingEntry'))),
        'transport_node_ids': type.OptionalType(type.ListType(type.StringType())),
    },
    SegmentPortState,
    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_firewall_packets': 'dropped_by_firewall_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_firewall_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_firewall_packets: :class:`DfwDropCounters` or ``None``
        :param dropped_by_firewall_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_firewall_packets = dropped_by_firewall_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_firewall_packets': type.OptionalType(type.ReferenceType(__name__, 'DfwDropCounters')),
        '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 SegmentPortStatus(VapiStruct):
    """
    Segment port status on specific Enforcement Point.

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


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'logical_port_id': 'logical_port_id',
                            'status': 'status',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 logical_port_id=None,
                 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  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:`SegmentPortStatus.STATUS_UP`
            * :attr:`SegmentPortStatus.STATUS_DOWN`
            * :attr:`SegmentPortStatus.STATUS_UNKNOWN`
            
            The Operational status of the logical port
        """
        self.last_update_timestamp = last_update_timestamp
        self.logical_port_id = logical_port_id
        self.status = status
        VapiStruct.__init__(self)


SegmentPortStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_status', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'logical_port_id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    SegmentPortStatus,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 SegmentRequestParameter(VapiStruct):
    """
    Segment request parameter, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "SegmentRequestParameter"
    """
    Identifier denoting this class, when it is used 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': 'force',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 force=None,
                 resource_type='SegmentRequestParameter',
                ):
        """
        :type  force: :class:`bool` or ``None``
        :param force: Force segment update.
        :type  resource_type: :class:`str`
        :param resource_type: The type of this request parameter.
        """
        self.force = force
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

SegmentRequestParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_request_parameter', {
        'force': type.OptionalType(type.BooleanType()),
        'resource_type': type.StringType(),
    },
    SegmentRequestParameter,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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
            activated and client blocking is deactivated 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 deactivated 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
            activated and client blocking is deactivated 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 deactivated 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: Activate or deactivate Router Advertisement Guard.
        :type  rate_limits: :class:`TrafficRateLimits` or ``None``
        :param rate_limits: 
        :type  rate_limits_enabled: :class:`bool` or ``None``
        :param rate_limits_enabled: Activate or deactivate 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_: 
        :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_firewall_packets': 'dropped_by_firewall_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',
                            'nsxt_swsec': 'nsxt_swsec',
                            'nsxt_vdl2': 'nsxt_vdl2',
                            'nsxt_vdrb': 'nsxt_vdrb',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_firewall_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 last_update_timestamp=None,
                 logical_switch_id=None,
                 nsxt_swsec=None,
                 nsxt_vdl2=None,
                 nsxt_vdrb=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_firewall_packets: :class:`DfwDropCounters` or ``None``
        :param dropped_by_firewall_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.
        :type  nsxt_swsec: :class:`SwsecCounters` or ``None``
        :param nsxt_swsec: 
        :type  nsxt_vdl2: :class:`Vdl2Counters` or ``None``
        :param nsxt_vdl2: 
        :type  nsxt_vdrb: :class:`VdrbCounters` or ``None``
        :param nsxt_vdrb: 
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_firewall_packets = dropped_by_firewall_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
        self.nsxt_swsec = nsxt_swsec
        self.nsxt_vdl2 = nsxt_vdl2
        self.nsxt_vdrb = nsxt_vdrb
        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_firewall_packets': type.OptionalType(type.ReferenceType(__name__, 'DfwDropCounters')),
        '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()),
        'nsxt_swsec': type.OptionalType(type.ReferenceType(__name__, 'SwsecCounters')),
        'nsxt_vdl2': type.OptionalType(type.ReferenceType(__name__, 'Vdl2Counters')),
        'nsxt_vdrb': type.OptionalType(type.ReferenceType(__name__, 'VdrbCounters')),
    },
    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: 
            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 SelectiveSyncSettings(VapiStruct):
    """
    Directory domain 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_: 
        :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,
            which NSX will synchronize with in LDAP server. The full
            distiguished name (DN) should be used for OrgUnit. 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)


SelectiveSyncSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.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())),
    },
    SelectiveSyncSettings,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 entries for this service
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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"
    """


    """
    FUNCTIONALITIES_TLB = "TLB"
    """


    """
    FUNCTIONALITIES_MPS = "MPS"
    """


    """
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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 and
            MPS.
        :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`
            * :attr:`ServiceDefinition.FUNCTIONALITIES_TLB`
            * :attr:`ServiceDefinition.FUNCTIONALITIES_MPS`
            
            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 | TLB - Transparent Load Balancer | EPP - Endpoint
            Protection.(Third party AntiVirus partners using NXGI should use
            this functionality for the service) | MPS - Malware Prevention
            Solution
        :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) and MPS functionality.
        :type  service_capability: :class:`ServiceCapability` or ``None``
        :param service_capability: 
        :type  service_deployment_spec: :class:`ServiceDeploymentSpec` or ``None``
        :param service_deployment_spec: 
        :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 and MPS.
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 ServiceGateway(VapiStruct):
    """
    Service Gateway serves as the default gateway for VPC.

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



    _canonical_to_pep_names = {
                            'auto_snat': 'auto_snat',
                            'disable': 'disable',
                            'qos_config': 'qos_config',
                            }

    def __init__(self,
                 auto_snat=None,
                 disable=None,
                 qos_config=None,
                ):
        """
        :type  auto_snat: :class:`bool` or ``None``
        :param auto_snat: Auto plumb snat rule for private subnet, this will make sure
            private subnets are routable outside of VPC. There will be one snat
            rule per VPC, translated ip will be taken from external ip block.
            If enabled, user must also configure external ip block. This
            property is applicable only when service_gateway is enabled.
        :type  disable: :class:`bool` or ``None``
        :param disable: Flag to deactivate service gateway for connected subnets. If false
            then VPC will support the following services: NAT, gateway security
            policies, and gateway QoS profile. If true, VPC will support only
            distributed services i.e., EW security policy. Workload shall be
            protected using the same. All traffic from subnets will be routed
            through the distributed router to the connected gateway and
            eliminates the intermediate hop of the service gateway.
        :type  qos_config: :class:`GatewayQosProfileConfig` or ``None``
        :param qos_config: 
        """
        self.auto_snat = auto_snat
        self.disable = disable
        self.qos_config = qos_config
        VapiStruct.__init__(self)


ServiceGateway._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_gateway', {
        'auto_snat': type.OptionalType(type.BooleanType()),
        'disable': type.OptionalType(type.BooleanType()),
        'qos_config': type.OptionalType(type.ReferenceType(__name__, 'GatewayQosProfileConfig')),
    },
    ServiceGateway,
    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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dhcp_relay_path': 'dhcp_relay_path',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dhcp_relay_path=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  dhcp_relay_path: :class:`str` or ``None``
        :param dhcp_relay_path: Policy path of dhcp-relay-config to be attached to this Interface.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dhcp_relay_path = dhcp_relay_path
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'dhcp_relay_path': type.OptionalType(type.StringType()),
        '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_: 
        :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_: 
        :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 ServicePath(VapiStruct):
    """
    An instance of service chain that consists of forward and reverse service
    paths.

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



    _canonical_to_pep_names = {
                            'forward_path': 'forward_path',
                            'reverse_path': 'reverse_path',
                            'service_chain_id': 'service_chain_id',
                            'service_chain_uuid': 'service_chain_uuid',
                            'service_path_id': 'service_path_id',
                            }

    def __init__(self,
                 forward_path=None,
                 reverse_path=None,
                 service_chain_id=None,
                 service_chain_uuid=None,
                 service_path_id=None,
                ):
        """
        :type  forward_path: :class:`UnidirectionalServicePath` or ``None``
        :param forward_path: 
        :type  reverse_path: :class:`UnidirectionalServicePath` or ``None``
        :param reverse_path: 
        :type  service_chain_id: :class:`long` or ``None``
        :param service_chain_id: A unique id of a service chain. format: int64
            This 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_uuid: :class:`str` or ``None``
        :param service_chain_uuid: Uuid of a service chain.
            This 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_id: :class:`long` or ``None``
        :param service_path_id: Unique identifier of a service path. format: int64
            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.forward_path = forward_path
        self.reverse_path = reverse_path
        self.service_chain_id = service_chain_id
        self.service_chain_uuid = service_chain_uuid
        self.service_path_id = service_path_id
        VapiStruct.__init__(self)


ServicePath._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_path', {
        'forward_path': type.OptionalType(type.ReferenceType(__name__, 'UnidirectionalServicePath')),
        'reverse_path': type.OptionalType(type.ReferenceType(__name__, 'UnidirectionalServicePath')),
        'service_chain_id': type.OptionalType(type.IntegerType()),
        'service_chain_uuid': type.OptionalType(type.StringType()),
        'service_path_id': type.OptionalType(type.IntegerType()),
    },
    ServicePath,
    False,
    None))



class ServicePathHop(VapiStruct):
    """
    Represents a service VM implementing a particular service in a service
    chain

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


    """
    ACTION_COPY = "COPY"
    """


    """
    ACTION_REDIRECT = "REDIRECT"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'can_decrement_si': 'can_decrement_si',
                            'in_maintenance_mode': 'in_maintenance_mode',
                            'is_active_from_ccp': 'is_active_from_ccp',
                            'is_active_from_dp': 'is_active_from_dp',
                            'is_active_from_mp': 'is_active_from_mp',
                            'mac_address': 'mac_address',
                            'nsh_liveness_support': 'nsh_liveness_support',
                            'vif': 'vif',
                            }

    def __init__(self,
                 action=None,
                 can_decrement_si=None,
                 in_maintenance_mode=None,
                 is_active_from_ccp=None,
                 is_active_from_dp=None,
                 is_active_from_mp=None,
                 mac_address=None,
                 nsh_liveness_support=None,
                 vif=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`ServicePathHop.ACTION_SERVICE_ACTION_INVALID`
            * :attr:`ServicePathHop.ACTION_COPY`
            * :attr:`ServicePathHop.ACTION_REDIRECT`
            
            Action that will be taken by the corresponding service VM of the
            hop.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :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  in_maintenance_mode: :class:`bool` or ``None``
        :param in_maintenance_mode: Indicating the maintenance mode of the corresponding service 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  is_active_from_ccp: :class:`bool` or ``None``
        :param is_active_from_ccp: Indicating whether the corresponding service VM is active or not
            per CCP.
            This 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_active_from_dp: :class:`bool` or ``None``
        :param is_active_from_dp: Indicating whether the corresponding service VM is active or not
            per DP.
            This 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_active_from_mp: :class:`bool` or ``None``
        :param is_active_from_mp: Indicating whether the corresponding service VM is active or not
            per MP.
            This 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_address: :class:`str` or ``None``
        :param mac_address: MAC address of the virtual network 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  nsh_liveness_support: :class:`bool` or ``None``
        :param nsh_liveness_support: Indicating whether NSH liveness is supported or not by the
            corresponding service 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  vif: :class:`str` or ``None``
        :param vif: ID of the virtual network 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.
        """
        self.action = action
        self.can_decrement_si = can_decrement_si
        self.in_maintenance_mode = in_maintenance_mode
        self.is_active_from_ccp = is_active_from_ccp
        self.is_active_from_dp = is_active_from_dp
        self.is_active_from_mp = is_active_from_mp
        self.mac_address = mac_address
        self.nsh_liveness_support = nsh_liveness_support
        self.vif = vif
        VapiStruct.__init__(self)


ServicePathHop._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_path_hop', {
        'action': type.OptionalType(type.StringType()),
        'can_decrement_si': type.OptionalType(type.BooleanType()),
        'in_maintenance_mode': type.OptionalType(type.BooleanType()),
        'is_active_from_ccp': type.OptionalType(type.BooleanType()),
        'is_active_from_dp': type.OptionalType(type.BooleanType()),
        'is_active_from_mp': type.OptionalType(type.BooleanType()),
        'mac_address': type.OptionalType(type.StringType()),
        'nsh_liveness_support': type.OptionalType(type.BooleanType()),
        'vif': type.OptionalType(type.StringType()),
    },
    ServicePathHop,
    False,
    None))



class ServicePathListResult(VapiStruct):
    """
    Service path 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_: 
        :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:`ServicePath` or ``None``
        :param results: List of homogenous service 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.
        """
        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)


ServicePathListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_path_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__, 'ServicePath'))),
    },
    ServicePathListResult,
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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_: 
        :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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 ShaDynamicPlugin(VapiStruct):
    """
    Define a kind of dynamic Sha plugin.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'applied_to_group_path': 'applied_to_group_path',
                            'is_plugin_uploaded': 'is_plugin_uploaded',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 applied_to_group_path=None,
                 is_plugin_uploaded=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  applied_to_group_path: :class:`str` or ``None``
        :param applied_to_group_path: The Policy group path to apply the changes on Sha Plugin. It can be
            pre-defined plugin or dynamic created plugin.
        :type  is_plugin_uploaded: :class:`bool` or ``None``
        :param is_plugin_uploaded: Flag to show the dynamic plugin zip file is uploaded.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.applied_to_group_path = applied_to_group_path
        self.is_plugin_uploaded = is_plugin_uploaded
        VapiStruct.__init__(self)


ShaDynamicPlugin._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_dynamic_plugin', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'applied_to_group_path': type.OptionalType(type.StringType()),
        'is_plugin_uploaded': type.OptionalType(type.BooleanType()),
    },
    ShaDynamicPlugin,
    False,
    None))



class ShaDynamicPluginListResult(VapiStruct):
    """
    Paged list of Sha dynamic plugin 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_: 
        :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:`ShaDynamicPlugin` or ``None``
        :param results: Sha dynamic plugin 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)


ShaDynamicPluginListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_dynamic_plugin_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__, 'ShaDynamicPlugin'))),
    },
    ShaDynamicPluginListResult,
    False,
    None))



class ShaDynamicPluginProfile(VapiStruct):
    """
    Dynamic created plugin profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ShaDynamicPluginProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'config': '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'applied_to_group_path': 'applied_to_group_path',
                            'applied_to_ua': 'applied_to_ua',
                            'enabled': 'enabled',
                            'plugin_path': 'plugin_path',
                            }

    def __init__(self,
                 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='ShaDynamicPluginProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 applied_to_group_path=None,
                 applied_to_ua=None,
                 enabled=None,
                 plugin_path=None,
                ):
        """
        :type  config: :class:`str` or ``None``
        :param config: Define the plugin configurtion.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`ShaPluginProfile.RESOURCE_TYPE_PREDEFINEDPLUGIN`
            * :attr:`ShaPluginProfile.RESOURCE_TYPE_DYNAMICPLUGIN`
            
            Valid System Health plugin types
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  applied_to_group_path: :class:`str` or ``None``
        :param applied_to_group_path: The Policy group path to apply the changes on Sha Plugin. It can be
            pre-defined plugin or dynamic created plugin.
        :type  applied_to_ua: :class:`bool` or ``None``
        :param applied_to_ua: The on-off switch of System Health Plugin on UA cluster nodes.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The on-off switch of System Health Plugin
        :type  plugin_path: :class:`str` or ``None``
        :param plugin_path: The policy path of Sha Plugin. It can be pre-defined plugin or
            dynamic created plugin.
        """
        self.config = 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.applied_to_group_path = applied_to_group_path
        self.applied_to_ua = applied_to_ua
        self.enabled = enabled
        self.plugin_path = plugin_path
        VapiStruct.__init__(self)

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

ShaDynamicPluginProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_dynamic_plugin_profile', {
        'config': 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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'applied_to_group_path': type.OptionalType(type.StringType()),
        'applied_to_ua': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'plugin_path': type.OptionalType(type.StringType()),
    },
    ShaDynamicPluginProfile,
    False,
    None))



class ShaPluginProfile(VapiStruct):
    """
    The ShaPluginProfile is the base class for System Health plugin profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ShaPluginProfile"
    """
    Identifier denoting this class, when it is used 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_PREDEFINEDPLUGIN = "PredefinedPlugin"
    """


    """
    RESOURCE_TYPE_DYNAMICPLUGIN = "DynamicPlugin"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'applied_to_group_path': 'applied_to_group_path',
                            'applied_to_ua': 'applied_to_ua',
                            'enabled': 'enabled',
                            'plugin_path': 'plugin_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='ShaPluginProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 applied_to_group_path=None,
                 applied_to_ua=None,
                 enabled=None,
                 plugin_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`ShaPluginProfile.RESOURCE_TYPE_PREDEFINEDPLUGIN`
            * :attr:`ShaPluginProfile.RESOURCE_TYPE_DYNAMICPLUGIN`
            
            Valid System Health plugin types
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  applied_to_group_path: :class:`str` or ``None``
        :param applied_to_group_path: The Policy group path to apply the changes on Sha Plugin. It can be
            pre-defined plugin or dynamic created plugin.
        :type  applied_to_ua: :class:`bool` or ``None``
        :param applied_to_ua: The on-off switch of System Health Plugin on UA cluster nodes.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The on-off switch of System Health Plugin
        :type  plugin_path: :class:`str` or ``None``
        :param plugin_path: The policy path of Sha Plugin. It can be pre-defined plugin or
            dynamic created plugin.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.applied_to_group_path = applied_to_group_path
        self.applied_to_ua = applied_to_ua
        self.enabled = enabled
        self.plugin_path = plugin_path
        VapiStruct.__init__(self)

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

ShaPluginProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_plugin_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'applied_to_group_path': type.OptionalType(type.StringType()),
        'applied_to_ua': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'plugin_path': type.OptionalType(type.StringType()),
    },
    ShaPluginProfile,
    False,
    None))



class ShaPluginProfileListResult(VapiStruct):
    """
    Paged list of Sha plugin 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_: 
        :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: Sha plugin profile list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ShaPluginProfile`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`ShaPluginProfile`.
        """
        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)


ShaPluginProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_plugin_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__, 'ShaPluginProfile')]))),
    },
    ShaPluginProfileListResult,
    False,
    None))



class ShaPreDefinedPluginListResult(VapiStruct):
    """
    Paged list of Sha pre-defined plugin 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_: 
        :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:`ShaPredefinedPlugin` or ``None``
        :param results: Sha plugin 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)


ShaPreDefinedPluginListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_pre_defined_plugin_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__, 'ShaPredefinedPlugin'))),
    },
    ShaPreDefinedPluginListResult,
    False,
    None))



class ShaPredefinedPlugin(VapiStruct):
    """
    System pre-defined plugin config

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


    """
    PRE_REQ_CONDITIONS_TSDB = "TSDB"
    """


    """
    PRE_REQ_CONDITIONS_TRACE = "TRACE"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_ESX = "NSX_ESX"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_KVM = "NSX_KVM"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_BAREMETAL_SERVER = "NSX_BAREMETAL_SERVER"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_EDGE = "NSX_EDGE"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_PUBLIC_CLOUD_GATEWAY = "NSX_PUBLIC_CLOUD_GATEWAY"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_MANAGER = "NSX_MANAGER"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_POLICY_MANAGER = "NSX_POLICY_MANAGER"
    """


    """
    SUPPORTED_NODE_TYPES_NSX_CONTROLLER = "NSX_CONTROLLER"
    """


    """
    SUPPORTED_NODE_TYPES_GLOBAL_MANAGER = "GLOBAL_MANAGER"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'config': 'config',
                            'delay_on_reboot': 'delay_on_reboot',
                            'enabled': 'enabled',
                            'pre_req_conditions': 'pre_req_conditions',
                            'supported_node_types': 'supported_node_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 config=None,
                 delay_on_reboot=None,
                 enabled=None,
                 pre_req_conditions=None,
                 supported_node_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  config: :class:`ShaPredefinedPluginProfileData` or ``None``
        :param config: 
        :type  delay_on_reboot: :class:`long` or ``None``
        :param delay_on_reboot: The corresponding plugin will wait for config seconds after reboot.
            format: int64
            This 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: The on-off switch of Sha plugin
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pre_req_conditions: :class:`list` of :class:`str` or ``None``
        :param pre_req_conditions: Possible values are: 
            
            * :attr:`ShaPredefinedPlugin.PRE_REQ_CONDITIONS_WAVE_FRONT`
            * :attr:`ShaPredefinedPlugin.PRE_REQ_CONDITIONS_TSDB`
            * :attr:`ShaPredefinedPlugin.PRE_REQ_CONDITIONS_TRACE`
            
            Display the pre-req conditions to run the predefined plugin.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  supported_node_types: :class:`list` of :class:`str` or ``None``
        :param supported_node_types: Possible values are: 
            
            * :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_ESX`
            * :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_KVM`
            *
              :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_BAREMETAL_SERVER`
            * :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_EDGE`
            *
              :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_PUBLIC_CLOUD_GATEWAY`
            * :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_MANAGER`
            *
              :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_POLICY_MANAGER`
            * :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_NSX_CONTROLLER`
            * :attr:`ShaPredefinedPlugin.SUPPORTED_NODE_TYPES_GLOBAL_MANAGER`
            
            Display the running node types of predefined plugin.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.config = config
        self.delay_on_reboot = delay_on_reboot
        self.enabled = enabled
        self.pre_req_conditions = pre_req_conditions
        self.supported_node_types = supported_node_types
        VapiStruct.__init__(self)


ShaPredefinedPlugin._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_predefined_plugin', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'config': type.OptionalType(type.ReferenceType(__name__, 'ShaPredefinedPluginProfileData')),
        'delay_on_reboot': type.OptionalType(type.IntegerType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'pre_req_conditions': type.OptionalType(type.ListType(type.StringType())),
        'supported_node_types': type.OptionalType(type.ListType(type.StringType())),
    },
    ShaPredefinedPlugin,
    False,
    None))



class ShaPredefinedPluginProfile(VapiStruct):
    """
    System predefined plugin profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ShaPredefinedPluginProfile"
    """
    Identifier denoting this class, when it is used 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 = {
                            'config': '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'applied_to_group_path': 'applied_to_group_path',
                            'applied_to_ua': 'applied_to_ua',
                            'enabled': 'enabled',
                            'plugin_path': 'plugin_path',
                            }

    def __init__(self,
                 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='ShaPredefinedPluginProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 applied_to_group_path=None,
                 applied_to_ua=None,
                 enabled=None,
                 plugin_path=None,
                ):
        """
        :type  config: :class:`ShaPredefinedPluginProfileData` or ``None``
        :param config: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`ShaPluginProfile.RESOURCE_TYPE_PREDEFINEDPLUGIN`
            * :attr:`ShaPluginProfile.RESOURCE_TYPE_DYNAMICPLUGIN`
            
            Valid System Health plugin types
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  applied_to_group_path: :class:`str` or ``None``
        :param applied_to_group_path: The Policy group path to apply the changes on Sha Plugin. It can be
            pre-defined plugin or dynamic created plugin.
        :type  applied_to_ua: :class:`bool` or ``None``
        :param applied_to_ua: The on-off switch of System Health Plugin on UA cluster nodes.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The on-off switch of System Health Plugin
        :type  plugin_path: :class:`str` or ``None``
        :param plugin_path: The policy path of Sha Plugin. It can be pre-defined plugin or
            dynamic created plugin.
        """
        self.config = 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.applied_to_group_path = applied_to_group_path
        self.applied_to_ua = applied_to_ua
        self.enabled = enabled
        self.plugin_path = plugin_path
        VapiStruct.__init__(self)

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

ShaPredefinedPluginProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_predefined_plugin_profile', {
        'config': type.OptionalType(type.ReferenceType(__name__, 'ShaPredefinedPluginProfileData')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'applied_to_group_path': type.OptionalType(type.StringType()),
        'applied_to_ua': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'plugin_path': type.OptionalType(type.StringType()),
    },
    ShaPredefinedPluginProfile,
    False,
    None))



class ShaPredefinedPluginProfileData(VapiStruct):
    """
    Describes a config item for System Health profile.

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



    _canonical_to_pep_names = {
                            'check_interval': 'check_interval',
                            'desired_crash': 'desired_crash',
                            'desired_duration': 'desired_duration',
                            'granular_desired_duration': 'granular_desired_duration',
                            'report_interval': 'report_interval',
                            'smallest_report_interval_if_change': 'smallest_report_interval_if_change',
                            'threshold': 'threshold',
                            }

    def __init__(self,
                 check_interval=None,
                 desired_crash=None,
                 desired_duration=None,
                 granular_desired_duration=None,
                 report_interval=None,
                 smallest_report_interval_if_change=None,
                 threshold=None,
                ):
        """
        :type  check_interval: :class:`long` or ``None``
        :param check_interval: The interval of plugin to check the status. format: int64
        :type  desired_crash: :class:`bool` or ``None``
        :param desired_crash: Whether crash the component which spew too much log
        :type  desired_duration: :class:`long` or ``None``
        :param desired_duration: The expected rotation of logging format: int64
        :type  granular_desired_duration: :class:`str` or ``None``
        :param granular_desired_duration: The expected rotation for each log
        :type  report_interval: :class:`long` or ``None``
        :param report_interval: The interval of plugin to report the status. format: int64
        :type  smallest_report_interval_if_change: :class:`long` or ``None``
        :param smallest_report_interval_if_change: The smallest report interval if the status is changed. The value of
            smallest_report_interval_if_change should be less than the value of
            report_interval format: int64
        :type  threshold: :class:`long` or ``None``
        :param threshold: The threshold to alarm logging report format: int64
        """
        self.check_interval = check_interval
        self.desired_crash = desired_crash
        self.desired_duration = desired_duration
        self.granular_desired_duration = granular_desired_duration
        self.report_interval = report_interval
        self.smallest_report_interval_if_change = smallest_report_interval_if_change
        self.threshold = threshold
        VapiStruct.__init__(self)


ShaPredefinedPluginProfileData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sha_predefined_plugin_profile_data', {
        'check_interval': type.OptionalType(type.IntegerType()),
        'desired_crash': type.OptionalType(type.BooleanType()),
        'desired_duration': type.OptionalType(type.IntegerType()),
        'granular_desired_duration': type.OptionalType(type.StringType()),
        'report_interval': type.OptionalType(type.IntegerType()),
        'smallest_report_interval_if_change': type.OptionalType(type.IntegerType()),
        'threshold': type.OptionalType(type.IntegerType()),
    },
    ShaPredefinedPluginProfileData,
    False,
    None))



class Share(VapiStruct):
    """
    A Share is a container that shares all its contents represented by
    associated SharedResource entities with Orgs or Projects represented using
    the 'sharedWith' property. Default share object is created by the system
    which is shared with all the orgs and projects by default. Id of default
    share object is default. Also, default share object per org/project will
    also be created as part of org/project creation workflow. Id of org share
    object will be \"<org-id>\", but for default org it is
    \"default-org-share\". Id of project share object will be
    \"<org-id>-<project-id>\" (ex: org1-project1).

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


    """
    SHARING_STRATEGY_ALL_DESCENDANTS = "ALL_DESCENDANTS"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'sharedWith': 'shared_with',
                            'sharing_strategy': 'sharing_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 shared_with=None,
                 sharing_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  shared_with: :class:`list` of :class:`str` or ``None``
        :param shared_with: Represents and array of the paths of the contexts (Org or Project)
            to which the contents of this share should be shared.
        :type  sharing_strategy: :class:`str` or ``None``
        :param sharing_strategy: Possible values are: 
            
            * :attr:`Share.SHARING_STRATEGY_NONE_DESCENDANTS`
            * :attr:`Share.SHARING_STRATEGY_ALL_DESCENDANTS`
            
            Strategy used to decide to which shareWith the contents of the
            share should be shared. Project is descendant of Org. Vpc is
            descendant of Project. ALL_DESCENDANTS - Share with the shareWith
            path and all it's descendants. NONE_DESCENDANTS - Share with the
            shareWith path only and not its descendants. (Default)
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.shared_with = shared_with
        self.sharing_strategy = sharing_strategy
        VapiStruct.__init__(self)


Share._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.share', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'sharedWith': type.OptionalType(type.ListType(type.StringType())),
        'sharing_strategy': type.OptionalType(type.StringType()),
    },
    Share,
    False,
    None))



class ShareListResult(VapiStruct):
    """
    Paged Collection of Shares

    .. 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_: 
        :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:`Share` or ``None``
        :param results: Share 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)


ShareListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.share_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__, 'Share'))),
    },
    ShareListResult,
    False,
    None))



class SharedResource(VapiStruct):
    """
    A SharedResource is a child of the resource that needs to be shared. Where
    the resoruce is shared is determined by the Share instance to which this
    shared resource refers. Default shared resource under default share object
    is created by the system. All the resources under default shared resources
    will be available for consumption to all the orgs/projects by default.
    Shared Resource for specific org will be available for consumption for that
    particular org only.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'resource_objects': 'resource_objects',
                            'share_shared_with': 'share_shared_with',
                            'share_sharing_strategy': 'share_sharing_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 resource_objects=None,
                 share_shared_with=None,
                 share_sharing_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  resource_objects: :class:`list` of :class:`ResourceObject` or ``None``
        :param resource_objects: Represents the path and other properties of the resource to be
            shared. The entity represented by this shared resource is shared
            with all the Orgs or Projects contexts that the Share container
            references.
        :type  share_shared_with: :class:`list` of :class:`str` or ``None``
        :param share_shared_with: Read only field. Shows subset (shared-with-me API context) of
            sharedWith used in Share.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  share_sharing_strategy: :class:`str` or ``None``
        :param share_sharing_strategy: Read only field. Shows sharing strategy used in Share.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.resource_objects = resource_objects
        self.share_shared_with = share_shared_with
        self.share_sharing_strategy = share_sharing_strategy
        VapiStruct.__init__(self)


SharedResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.shared_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'resource_objects': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceObject'))),
        'share_shared_with': type.OptionalType(type.ListType(type.StringType())),
        'share_sharing_strategy': type.OptionalType(type.StringType()),
    },
    SharedResource,
    False,
    None))



class SharedResourceListResult(VapiStruct):
    """
    Paged Collection of SharedResources

    .. 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_: 
        :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:`SharedResource` or ``None``
        :param results: SharedResource 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)


SharedResourceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.shared_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__, 'SharedResource'))),
    },
    SharedResourceListResult,
    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.
    """
    SITE_TYPE_ONPREM_LM = "ONPREM_LM"
    """


    """
    SITE_TYPE_SDDC_LM = "SDDC_LM"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'site_type': 'site_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 site_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        :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.
        :type  site_type: :class:`str` or ``None``
        :param site_type: Possible values are: 
            
            * :attr:`Site.SITE_TYPE_ONPREM_LM`
            * :attr:`Site.SITE_TYPE_SDDC_LM`
            
            The site_type property identifies type of current 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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
        self.site_type = site_type
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_type': type.OptionalType(type.StringType()),
    },
    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 Org.

    .. 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',
                            }

    def __init__(self,
                 edge_cluster_paths=None,
                 site_path=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 Org will
            be created. In case of Label, it should have reference of Edge
            cluster path.
        :type  site_path: :class:`str` or ``None``
        :param site_path: This represents the path of the site which is managed by Global
            Manager. For the local manager, if set, this needs to point to
            'default'.
        """
        self.edge_cluster_paths = edge_cluster_paths
        self.site_path = site_path
        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()),
    },
    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_: 
        :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',
                            'site_uuid': 'site_uuid',
                            'thumbprint': 'thumbprint',
                            'username': 'username',
                            }

    def __init__(self,
                 fqdn=None,
                 password=None,
                 site_uuid=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  site_uuid: :class:`str` or ``None``
        :param site_uuid: Site UUID supplied for connection info
        :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.site_uuid = site_uuid
        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()),
        'site_uuid': 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'message': 'message',
                            'previousErrorMessage': 'previous_error_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 message=None,
                 previous_error_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  previous_error_message: :class:`str` or ``None``
        :param previous_error_message: Contains previus failed message in case, state machine is stuck in
            a 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  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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.message = message
        self.previous_error_message = previous_error_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'previousErrorMessage': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    SiteOffBoardingState,
    False,
    None))



class SiteOverride(VapiStruct):
    """
    IPSecVPN site specific attributes specified only on GM. This allows user to
    specify site specific parameters which overrides the correspondig
    attributes in the IPSecVpnSession Object.

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



    _canonical_to_pep_names = {
                            'local_endpoint_path': 'local_endpoint_path',
                            'locale_service_path': 'locale_service_path',
                            'peer_address': 'peer_address',
                            'peer_id': 'peer_id',
                            'tunnel_interfaces': 'tunnel_interfaces',
                            }

    def __init__(self,
                 local_endpoint_path=None,
                 locale_service_path=None,
                 peer_address=None,
                 peer_id=None,
                 tunnel_interfaces=None,
                ):
        """
        :type  local_endpoint_path: :class:`str` or ``None``
        :param local_endpoint_path: Policy path referencing Local endpoint.
        :type  locale_service_path: :class:`str` or ``None``
        :param locale_service_path: Policy path referencing LocateService where SiteOverride attributes
            will be applied
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Public IPV4 or IPV6 address of the remote device terminating the
            VPN connection. Please note that configuring peer_address as IPv6
            address is not supported in the deprecated IPSecVpnSession
            Patch/PUT APIs. format: ip
        :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  tunnel_interfaces: :class:`list` of :class:`IPSecVpnTunnelInterface` or ``None``
        :param tunnel_interfaces: IP Tunnel interfaces. This property is mandatory for
            RouteBasedIpSecVpn session.
        """
        self.local_endpoint_path = local_endpoint_path
        self.locale_service_path = locale_service_path
        self.peer_address = peer_address
        self.peer_id = peer_id
        self.tunnel_interfaces = tunnel_interfaces
        VapiStruct.__init__(self)


SiteOverride._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site_override', {
        'local_endpoint_path': type.OptionalType(type.StringType()),
        'locale_service_path': type.OptionalType(type.StringType()),
        'peer_address': type.OptionalType(type.StringType()),
        'peer_id': type.OptionalType(type.StringType()),
        'tunnel_interfaces': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnTunnelInterface'))),
    },
    SiteOverride,
    False,
    None))



class SmartnicAgentStatus(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'node_id': 'node_id',
                            'statuses': 'statuses',
                            }

    def __init__(self,
                 node_id=None,
                 statuses=None,
                ):
        """
        :type  node_id: :class:`str` or ``None``
        :param node_id: Smartnic Node id
        :type  statuses: :class:`list` of :class:`AgentStatus` or ``None``
        :param statuses: List of agent statuses belonging to the Smartnic
        """
        self.node_id = node_id
        self.statuses = statuses
        VapiStruct.__init__(self)


SmartnicAgentStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.smartnic_agent_status', {
        'node_id': type.OptionalType(type.StringType()),
        'statuses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AgentStatus'))),
    },
    SmartnicAgentStatus,
    False,
    None))



class SoftwareModule(VapiStruct):
    """
    Software module details

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



    _canonical_to_pep_names = {
                            'module_name': 'module_name',
                            'module_version': 'module_version',
                            }

    def __init__(self,
                 module_name=None,
                 module_version=None,
                ):
        """
        :type  module_name: :class:`str` or ``None``
        :param module_name: Name of the module in the node
        :type  module_version: :class:`str` or ``None``
        :param module_version: Version of the module in the node
        """
        self.module_name = module_name
        self.module_version = module_version
        VapiStruct.__init__(self)


SoftwareModule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.software_module', {
        'module_name': type.OptionalType(type.StringType()),
        'module_version': type.OptionalType(type.StringType()),
    },
    SoftwareModule,
    False,
    None))



class SoftwareModuleResult(VapiStruct):
    """
    Software module result

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



    _canonical_to_pep_names = {
                            'software_modules': 'software_modules',
                            }

    def __init__(self,
                 software_modules=None,
                ):
        """
        :type  software_modules: :class:`list` of :class:`SoftwareModule` or ``None``
        :param software_modules: Software module results
        """
        self.software_modules = software_modules
        VapiStruct.__init__(self)


SoftwareModuleResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.software_module_result', {
        'software_modules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SoftwareModule'))),
    },
    SoftwareModuleResult,
    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 SpacerWidgetConfiguration(VapiStruct):
    """
    Represents configuration for spacer widget. For this widget the data source
    is not applicable. This widget can be use to add the space inside the
    dashboard container.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "SpacerWidgetConfiguration"
    """
    Identifier denoting this class, when it is used 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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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='SpacerWidgetConfiguration',
                 tags=None,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

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

SpacerWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.spacer_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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    SpacerWidgetConfiguration,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'address_binding_allowlist': 'address_binding_allowlist',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 address_binding_allowlist=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_allowlist: :class:`bool` or ``None``
        :param address_binding_allowlist: If true, enable the SpoofGuard, which only allows VM sending
            traffic with the IPs in the allowlist. This value cannot conflict
            with whitelist.
        :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 allowlist. This field is deprecated
            because it has offensive terminology. Please use
            address_binding_allowlist. This value cannot conflict with allow
            list.

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.address_binding_allowlist = address_binding_allowlist
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_allowlist': 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_: 
        :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 StandaloneHostIdfwConfiguration(VapiStruct):
    """
    Idfw configuration for activate/deactivate 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 StandardHostSwitch(VapiStruct):
    """
    Standard host switch specification

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


    """
    HOST_SWITCH_MODE_ENS = "ENS"
    """


    """
    HOST_SWITCH_MODE_ENS_INTERRUPT = "ENS_INTERRUPT"
    """


    """
    HOST_SWITCH_MODE_LEGACY = "LEGACY"
    """


    """
    HOST_SWITCH_TYPE_NVDS = "NVDS"
    """


    """
    HOST_SWITCH_TYPE_VDS = "VDS"
    """


    """



    _canonical_to_pep_names = {
                            'cpu_config': 'cpu_config',
                            'host_switch_id': 'host_switch_id',
                            'host_switch_mode': 'host_switch_mode',
                            'host_switch_name': 'host_switch_name',
                            'host_switch_profile_ids': 'host_switch_profile_ids',
                            'host_switch_type': 'host_switch_type',
                            'ip_assignment_spec': 'ip_assignment_spec',
                            'ipv6_assignment_spec': 'ipv6_assignment_spec',
                            'is_migrate_pnics': 'is_migrate_pnics',
                            'pnics': 'pnics',
                            'pnics_uninstall_migration': 'pnics_uninstall_migration',
                            'portgroup_transport_zone_id': 'portgroup_transport_zone_id',
                            'transport_node_profile_sub_configs': 'transport_node_profile_sub_configs',
                            'transport_zone_endpoints': 'transport_zone_endpoints',
                            'uplinks': 'uplinks',
                            'vmk_install_migration': 'vmk_install_migration',
                            'vmk_uninstall_migration': 'vmk_uninstall_migration',
                            }

    def __init__(self,
                 cpu_config=None,
                 host_switch_id=None,
                 host_switch_mode=None,
                 host_switch_name=None,
                 host_switch_profile_ids=None,
                 host_switch_type=None,
                 ip_assignment_spec=None,
                 ipv6_assignment_spec=None,
                 is_migrate_pnics=None,
                 pnics=None,
                 pnics_uninstall_migration=None,
                 portgroup_transport_zone_id=None,
                 transport_node_profile_sub_configs=None,
                 transport_zone_endpoints=None,
                 uplinks=None,
                 vmk_install_migration=None,
                 vmk_uninstall_migration=None,
                ):
        """
        :type  cpu_config: :class:`list` of :class:`CpuCoreConfigForEnhancedNetworkingStackSwitch` or ``None``
        :param cpu_config: CPU configuration specifies number of Logical cpu cores (Lcores)
            per Non Uniform Memory Access (NUMA) node dedicated to Enhanced
            Networking Stack enabled HostSwitch to get the best performance.
        :type  host_switch_id: :class:`str` or ``None``
        :param host_switch_id: This field is writable only in case of VDS type HostSwitch and
            system generated for NVDS type. For VDS type host switch, This
            field is used to lookup a VDS from corresponding Compute Manager
            and then can be configured for logical networking. For NVDS type
            host switch, This field is system generated and if provided will be
            overwritten.
        :type  host_switch_mode: :class:`str` or ``None``
        :param host_switch_mode: Possible values are: 
            
            * :attr:`StandardHostSwitch.HOST_SWITCH_MODE_STANDARD`
            * :attr:`StandardHostSwitch.HOST_SWITCH_MODE_ENS`
            * :attr:`StandardHostSwitch.HOST_SWITCH_MODE_ENS_INTERRUPT`
            * :attr:`StandardHostSwitch.HOST_SWITCH_MODE_LEGACY`
            
            STANDARD - This mode applies to all transport nodes. The realized
            host switch mode will be chosen automatically (best applicable as
            per uplink capabilities) by the data-plane in the transport node
            and may change in future. ENS - This is the Enhanced Data Path
            switch mode for ESX host tranport node. This mode provides
            accelerated networking performances but also introduces additional
            prerequisites. In order to benefit from this mode, workloads will
            be need to be compiled with DPDK and will use VMXNET3 for their
            vNIC. This mode is only available on ESX hypervisor (6.7 and above,
            recommended 6.7 U2 and above) and unavailable on KVM, EDGE and
            Public Cloud Gateway. Not all NSX features are available in this
            mode, please consult the documentation. ENS_INTERRUPT - This is an
            interrupt driven variant of the Enhanced Data Path mode. Please,
            consult your account representative for applicability. This mode is
            available only on ESX hypervisor (7.0 and above). LEGACY - This
            mode applies to all transport nodes. This mode was formerly called
            as STANDARD and is realized as pktHandle. IMPORTANT: ENS and
            ENS_INTERRUPT modes require a higher tier of NSX licenses. ENS and
            ENS_INTERRUPT with classic Nic - NSX advanced or higher ENS with
            SmartNic : NSX Enterprise Plus or higher. Please consult NSX
            documentation for complete details.
        :type  host_switch_name: :class:`str` or ``None``
        :param host_switch_name: This field is writable only in case of NVDS type HostSwitch and
            system generated for VDS type. For NVDS type host switch, If this
            name is unset or empty then the default host switch name will be
            used. The name must be unique among all host switches specified in
            a given transport node; unset name, empty name and the default host
            switch name are considered the same in terms of uniqueness. For VDS
            type host switch, Manager fetches VDS name from corresponding
            Compute Manager and populates this field. If VDS name is given
            (correct or incorrect) it is ignored and overwritten with correct
            one.

            .. deprecated:: unknown
        :type  host_switch_profile_ids: :class:`list` of :class:`HostSwitchProfileTypeIdEntry` or ``None``
        :param host_switch_profile_ids: Host switch profiles bound to this host switch. If a profile ID is
            not provided for any HostSwitchProfileType that is supported by the
            transport node, the corresponding default profile will be bound to
            the host switch. If transport node is created using Policy APIs,
            use policyPaths instead of UUIDs.
        :type  host_switch_type: :class:`str` or ``None``
        :param host_switch_type: Possible values are: 
            
            * :attr:`StandardHostSwitch.HOST_SWITCH_TYPE_NVDS`
            * :attr:`StandardHostSwitch.HOST_SWITCH_TYPE_VDS`
            
            VDS represents VMware vSphere Distributed Switch from vSphere that
            is used as HostSwitch through TransportNode or TransportNodeProfile
            configuration. When VDS is used as a HostSwitch, Hosts have to be
            added to VDS from vSphere and VDS instance is created on Hosts. To
            configure NSX on such hosts, you can use this VDS as a HostSwitch
            from NSX manager. vCenter has the ownership of MTU, LAG, NIOC and
            LLDP configuration of such VDS backed HostSwitch. Remaining
            configuration (e.g. UplinkHostswitchProfile) will be managed by
            NSX. NVDS represents NSX Virtual Switch which is NSX native
            HostSwitch. All configurations of NVDS will be managed by NSX.
            HostSwitch of type NVDS has been deprecated on ESX hosts that are
            managed by a vCenter Server.
        :type  ip_assignment_spec: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ip_assignment_spec: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IpAssignmentSpec`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`IpAssignmentSpec`.
        :type  ipv6_assignment_spec: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ipv6_assignment_spec: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Ipv6AssignmentSpec`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`Ipv6AssignmentSpec`.
        :type  is_migrate_pnics: :class:`bool` or ``None``
        :param is_migrate_pnics: When using the Quick Start workflow on 7.0 and above vCenter
            clusters, if the pnics specified in the pnics field are used by a
            single VSS HostSwitch, then they are migrated over to recommended
            VDS HostSwitch. If any two pnics are not used by the same VSS
            HostSwitch or VDS HostSwitch, it is not supported. In such cases,
            please migrate them in multiple steps, one VSS HostSwitch or VDS
            HostSwitch at a time.
        :type  pnics: :class:`list` of :class:`Pnic` or ``None``
        :param pnics: When using the Quick Start workflow on 7.0 and above vCenter
            clusters, pnic information will be populated by the recommendation
            engine when providing a VDS HostSwitch based recommendation for a
            VSS HostSwitch.
        :type  pnics_uninstall_migration: :class:`list` of :class:`Pnic` or ``None``
        :param pnics_uninstall_migration: This is only supported for NVDS type of host switch. If this is
            specified for VDS type of host switch, an error will be returned to
            user. The pnics to be migrated out to a non N-VDS switch during
            transport node deletion.

            .. deprecated:: unknown
        :type  portgroup_transport_zone_id: :class:`str` or ``None``
        :param portgroup_transport_zone_id: A transport zone will be created for each DVS found across all
            hosts in a cluster that is installed for NSX on DVPG. This field,
            populated by NSX, is the ID of the transport zone created for the
            DVS this host switch represents. All discovered segments created
            for the DVPGs found on the DVS will have this ID specified as the
            transport zone id.
        :type  transport_node_profile_sub_configs: :class:`list` of :class:`TransportNodeProfileSubConfig` or ``None``
        :param transport_node_profile_sub_configs: This field is supported only for Tranport Node Profile
            Configurations. This field is used for adding a subset of the host
            switch configuration under a Transport Node Profile. This field is
            applicable only for a VDS based host switch and not for an NVDS
            based host switch.
        :type  transport_zone_endpoints: :class:`list` of :class:`TransportZoneEndPoint` or ``None``
        :param transport_zone_endpoints: List of TransportZones that are to be associated with specified
            host switch. If this property is specified, host_switch_mode at
            StandardHostSwitch level must be specified.
        :type  uplinks: :class:`list` of :class:`VdsUplink` or ``None``
        :param uplinks: If VDS is used as a HostSwitch this attribute must be specified.
            You can associate uplinks from UplinkHostSwitchProfile to either
            VDS uplink or LAG. VDS uplink or LAG will inherit the global VDS
            level teaming policy from vSphere. NSX managed uplink or LAG will
            have NSX teaming policy configured through UplinkHostSwitchProfile.
        :type  vmk_install_migration: :class:`list` of :class:`VmknicNetwork` or ``None``
        :param vmk_install_migration: When using the Quick Start workflow on 7.0 and above vCenter
            clusters, vmnk_install_migration will be populated by the
            recommendation engine when providing a VDS HostSwitch based
            recommendation for a VSS HostSwitch. It will contain The vmk
            interfaces and the associated logical switches on the HostSwitch.
            The state of this field is realized on the transport node during
            creation
        :type  vmk_uninstall_migration: :class:`list` of :class:`VmknicNetwork` or ``None``
        :param vmk_uninstall_migration: This is only supported for NVDS type of host switch. If this is
            specified for VDS type of host switch, an error will be returned to
            user. The vmk interfaces and the associated portgroups on the
            VSS/DVS. This field is realized on the host during transport node
            deletion or NSX uninstallation to specify the destination for all
            vmks on N-VDS switches.

            .. deprecated:: unknown
        """
        self.cpu_config = cpu_config
        self.host_switch_id = host_switch_id
        self.host_switch_mode = host_switch_mode
        self.host_switch_name = host_switch_name
        self.host_switch_profile_ids = host_switch_profile_ids
        self.host_switch_type = host_switch_type
        self.ip_assignment_spec = ip_assignment_spec
        self.ipv6_assignment_spec = ipv6_assignment_spec
        self.is_migrate_pnics = is_migrate_pnics
        self.pnics = pnics
        self.pnics_uninstall_migration = pnics_uninstall_migration
        self.portgroup_transport_zone_id = portgroup_transport_zone_id
        self.transport_node_profile_sub_configs = transport_node_profile_sub_configs
        self.transport_zone_endpoints = transport_zone_endpoints
        self.uplinks = uplinks
        self.vmk_install_migration = vmk_install_migration
        self.vmk_uninstall_migration = vmk_uninstall_migration
        VapiStruct.__init__(self)


StandardHostSwitch._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.standard_host_switch', {
        'cpu_config': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CpuCoreConfigForEnhancedNetworkingStackSwitch'))),
        'host_switch_id': type.OptionalType(type.StringType()),
        'host_switch_mode': type.OptionalType(type.StringType()),
        'host_switch_name': type.OptionalType(type.StringType()),
        'host_switch_profile_ids': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HostSwitchProfileTypeIdEntry'))),
        'host_switch_type': type.OptionalType(type.StringType()),
        'ip_assignment_spec': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IpAssignmentSpec')])),
        'ipv6_assignment_spec': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Ipv6AssignmentSpec')])),
        'is_migrate_pnics': type.OptionalType(type.BooleanType()),
        'pnics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Pnic'))),
        'pnics_uninstall_migration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Pnic'))),
        'portgroup_transport_zone_id': type.OptionalType(type.StringType()),
        'transport_node_profile_sub_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TransportNodeProfileSubConfig'))),
        'transport_zone_endpoints': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TransportZoneEndPoint'))),
        'uplinks': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VdsUplink'))),
        'vmk_install_migration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VmknicNetwork'))),
        'vmk_uninstall_migration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VmknicNetwork'))),
    },
    StandardHostSwitch,
    False,
    None))



class StandardHostSwitchSpec(VapiStruct):
    """
    Standard host switch specification is used for NSX configured transport
    node.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StandardHostSwitchSpec"
    """
    Identifier denoting this class, when it is used 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 = {
                            'host_switches': 'host_switches',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 host_switches=None,
                 resource_type='StandardHostSwitchSpec',
                ):
        """
        :type  host_switches: :class:`list` of :class:`StandardHostSwitch` or ``None``
        :param host_switches: Transport Node host switches
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`HostSwitchSpec.RESOURCE_TYPE_STANDARDHOSTSWITCHSPEC`
            * :attr:`HostSwitchSpec.RESOURCE_TYPE_PRECONFIGUREDHOSTSWITCHSPEC`
        """
        self.host_switches = host_switches
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StandardHostSwitchSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.standard_host_switch_spec', {
        'host_switches': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'StandardHostSwitch'))),
        'resource_type': type.StringType(),
    },
    StandardHostSwitchSpec,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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 = {
                            'additional_value': 'additional_value',
                            'display_name': 'display_name',
                            'info_text': 'info_text',
                            'short_display_name': 'short_display_name',
                            'value': 'value',
                            }

    def __init__(self,
                 additional_value=None,
                 display_name=None,
                 info_text=None,
                 short_display_name=None,
                 value=None,
                ):
        """
        :type  additional_value: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param additional_value: An additional key-value pair for static filter.
        :type  display_name: :class:`str` or ``None``
        :param display_name: display name to be shown in the drop down for static filter.
        :type  info_text: :class:`str` or ``None``
        :param info_text: Additional information to be shown along with the static filter. It
            will shown on the tooltip of an info icon,
        :type  short_display_name: :class:`str` or ``None``
        :param short_display_name: Property value is shown in the drop down input box for a filter. If
            the value is not provided 'display_name' property value is used.
        :type  value: :class:`str` or ``None``
        :param value: Value of static filter inside dropdown filter.
        """
        self.additional_value = additional_value
        self.display_name = display_name
        self.info_text = info_text
        self.short_display_name = short_display_name
        self.value = value
        VapiStruct.__init__(self)


StaticFilter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_filter', {
        'additional_value': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'display_name': type.OptionalType(type.StringType()),
        'info_text': type.OptionalType(type.StringType()),
        'short_display_name': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    StaticFilter,
    False,
    None))



class StaticIpAllocation(VapiStruct):
    """
    Static IP allocation for VPC Subnet ports with VIF attachement

    .. 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 ip and mac addresse allocation for VPC Subnet ports from
            static ip pool. To enable this, dhcp pool shall be empty and static
            ip pool shall own all available ip addresses.
        """
        self.enabled = enabled
        VapiStruct.__init__(self)


StaticIpAllocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ip_allocation', {
        'enabled': type.OptionalType(type.BooleanType()),
    },
    StaticIpAllocation,
    False,
    None))



class StaticIpListSpec(VapiStruct):
    """
    IP assignment specification for Static IP List.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StaticIpListSpec"
    """
    Identifier denoting this class, when it is used 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_gateway': 'default_gateway',
                            'ip_list': 'ip_list',
                            'subnet_mask': 'subnet_mask',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 default_gateway=None,
                 ip_list=None,
                 subnet_mask=None,
                 resource_type='StaticIpListSpec',
                ):
        """
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Gateway IP format: ip
        :type  ip_list: :class:`list` of :class:`str` or ``None``
        :param ip_list: List of IPs for transport node host switch virtual tunnel endpoints
            format: ip
        :type  subnet_mask: :class:`str` or ``None``
        :param subnet_mask: Subnet mask format: ip
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPPOOLSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCP`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPMACLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_NOIPV4`
        """
        self.default_gateway = default_gateway
        self.ip_list = ip_list
        self.subnet_mask = subnet_mask
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StaticIpListSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ip_list_spec', {
        'default_gateway': type.OptionalType(type.StringType()),
        'ip_list': type.OptionalType(type.ListType(type.StringType())),
        'subnet_mask': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    StaticIpListSpec,
    False,
    None))



class StaticIpMacListSpec(VapiStruct):
    """
    IP and MAC assignment specification for Static IP List.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StaticIpMacListSpec"
    """
    Identifier denoting this class, when it is used 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_gateway': 'default_gateway',
                            'ip_mac_list': 'ip_mac_list',
                            'subnet_mask': 'subnet_mask',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 default_gateway=None,
                 ip_mac_list=None,
                 subnet_mask=None,
                 resource_type='StaticIpMacListSpec',
                ):
        """
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Gateway IP format: ip
        :type  ip_mac_list: :class:`list` of :class:`IpMacPair` or ``None``
        :param ip_mac_list: List of IPs and MACs for transport node host switch virtual tunnel
            endpoints
        :type  subnet_mask: :class:`str` or ``None``
        :param subnet_mask: Subnet mask format: ip
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPPOOLSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCP`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPMACLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_NOIPV4`
        """
        self.default_gateway = default_gateway
        self.ip_mac_list = ip_mac_list
        self.subnet_mask = subnet_mask
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StaticIpMacListSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ip_mac_list_spec', {
        'default_gateway': type.OptionalType(type.StringType()),
        'ip_mac_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpMacPair'))),
        'subnet_mask': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    StaticIpMacListSpec,
    False,
    None))



class StaticIpPoolSpec(VapiStruct):
    """
    IP assignment specification for Static IP Pool.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StaticIpPoolSpec"
    """
    Identifier denoting this class, when it is used 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_pool_id': 'ip_pool_id',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 ip_pool_id=None,
                 resource_type='StaticIpPoolSpec',
                ):
        """
        :type  ip_pool_id: :class:`str` or ``None``
        :param ip_pool_id: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPPOOLSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCP`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_STATICIPMACLISTSPEC`
            * :attr:`IpAssignmentSpec.RESOURCE_TYPE_NOIPV4`
        """
        self.ip_pool_id = ip_pool_id
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StaticIpPoolSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ip_pool_spec', {
        'ip_pool_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    StaticIpPoolSpec,
    False,
    None))



class StaticIpv6ListSpec(VapiStruct):
    """
    IPv6 assignment specification for Static IP List.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StaticIpv6ListSpec"
    """
    Identifier denoting this class, when it is used 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_gateway': 'default_gateway',
                            'ipv6_list': 'ipv6_list',
                            'prefix_length': 'prefix_length',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 default_gateway=None,
                 ipv6_list=None,
                 prefix_length=None,
                 resource_type='StaticIpv6ListSpec',
                ):
        """
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Gateway IP format: ipv6
        :type  ipv6_list: :class:`list` of :class:`str` or ``None``
        :param ipv6_list: List of IPv6 IPs for transport node host switch virtual tunnel
            endpoints format: ipv6
        :type  prefix_length: :class:`str` or ``None``
        :param prefix_length: Prefix Length
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6POOLSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6LISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCPV6`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6MACLISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYAUTOCONF`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_NOIPV6`
        """
        self.default_gateway = default_gateway
        self.ipv6_list = ipv6_list
        self.prefix_length = prefix_length
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StaticIpv6ListSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ipv6_list_spec', {
        'default_gateway': type.OptionalType(type.StringType()),
        'ipv6_list': type.OptionalType(type.ListType(type.StringType())),
        'prefix_length': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    StaticIpv6ListSpec,
    False,
    None))



class StaticIpv6MacListSpec(VapiStruct):
    """
    IPv6 and MAC assignment specification for Static IP List.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StaticIpv6MacListSpec"
    """
    Identifier denoting this class, when it is used 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_gateway': 'default_gateway',
                            'ipv6_mac_list': 'ipv6_mac_list',
                            'prefix_length': 'prefix_length',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 default_gateway=None,
                 ipv6_mac_list=None,
                 prefix_length=None,
                 resource_type='StaticIpv6MacListSpec',
                ):
        """
        :type  default_gateway: :class:`str` or ``None``
        :param default_gateway: Gateway IP format: ipv6
        :type  ipv6_mac_list: :class:`list` of :class:`Ipv6MacPair` or ``None``
        :param ipv6_mac_list: List of IPs and MACs for transport node host switch virtual tunnel
            endpoints
        :type  prefix_length: :class:`str` or ``None``
        :param prefix_length: Prefix Length
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6POOLSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6LISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCPV6`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6MACLISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYAUTOCONF`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_NOIPV6`
        """
        self.default_gateway = default_gateway
        self.ipv6_mac_list = ipv6_mac_list
        self.prefix_length = prefix_length
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StaticIpv6MacListSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ipv6_mac_list_spec', {
        'default_gateway': type.OptionalType(type.StringType()),
        'ipv6_mac_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Ipv6MacPair'))),
        'prefix_length': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    StaticIpv6MacListSpec,
    False,
    None))



class StaticIpv6PoolSpec(VapiStruct):
    """
    IPv6 assignment specification for Static IP Pool.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StaticIpv6PoolSpec"
    """
    Identifier denoting this class, when it is used 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 = {
                            'ipv6_pool_id': 'ipv6_pool_id',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 ipv6_pool_id=None,
                 resource_type='StaticIpv6PoolSpec',
                ):
        """
        :type  ipv6_pool_id: :class:`str` or ``None``
        :param ipv6_pool_id: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6POOLSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6LISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYDHCPV6`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_STATICIPV6MACLISTSPEC`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_ASSIGNEDBYAUTOCONF`
            * :attr:`Ipv6AssignmentSpec.RESOURCE_TYPE_NOIPV6`
        """
        self.ipv6_pool_id = ipv6_pool_id
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StaticIpv6PoolSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ipv6_pool_spec', {
        'ipv6_pool_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    StaticIpv6PoolSpec,
    False,
    None))



class StaticMimeContent(VapiStruct):
    """
    MIME content with text message and image path in it.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'text_message': 'text_message',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 text_message=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  text_message: :class:`str` or ``None``
        :param text_message: text message.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.text_message = text_message
        VapiStruct.__init__(self)


StaticMimeContent._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_mime_content', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'text_message': type.OptionalType(type.StringType()),
    },
    StaticMimeContent,
    False,
    None))



class StaticMimeContentListResult(VapiStruct):
    """
    Paged Collection of Policy static mime contents

    .. 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_: 
        :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:`StaticMimeContent` or ``None``
        :param results: Policy static mime content 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)


StaticMimeContentListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_mime_content_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__, 'StaticMimeContent'))),
    },
    StaticMimeContentListResult,
    False,
    None))



class StaticPoolConfig(VapiStruct):
    """
    Static IP pool configuration

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



    _canonical_to_pep_names = {
                            'ipv4_pool_size': 'ipv4_pool_size',
                            }

    def __init__(self,
                 ipv4_pool_size=None,
                ):
        """
        :type  ipv4_pool_size: :class:`long` or ``None``
        :param ipv4_pool_size: Number of IPs to be reserved in static ip pool. Maximum allowed
            value is 'subnet size - 4'. If dhcp is enabled then by default
            static ipv4 pool size will be zero and all available IPs will be
            reserved in local dhcp pool. If dhcp is deactivated then by default
            all IPs will be reserved in static ip pool. format: int32
        """
        self.ipv4_pool_size = ipv4_pool_size
        VapiStruct.__init__(self)


StaticPoolConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_pool_config', {
        'ipv4_pool_size': type.OptionalType(type.IntegerType()),
    },
    StaticPoolConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Both IPv4 and IPv6 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. Both IPv4 and IPv6 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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, Tier-1 or VPC.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. Not applicable for
            static routes created under VPC.
        :type  network: :class:`str` or ``None``
        :param network: Specify network address in CIDR format. In case of VPC, user can
            optionally use allocated IP from one of the external blocks
            associated with VPC. Only /32 CIDR is allowed in case IP overlaps
            with external blocks. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  label: :class:`Label` or ``None``
        :param label: 
        :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: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    StatsConfiguration,
    False,
    None))



class StatusCount(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 = {
                            'degraded_count': 'degraded_count',
                            'down_count': 'down_count',
                            'down_pnics': 'down_pnics',
                            'last_status_changed_time': 'last_status_changed_time',
                            'status': 'status',
                            'status_description': 'status_description',
                            'up_count': 'up_count',
                            }

    def __init__(self,
                 degraded_count=None,
                 down_count=None,
                 down_pnics=None,
                 last_status_changed_time=None,
                 status=None,
                 status_description=None,
                 up_count=None,
                ):
        """
        :type  degraded_count: :class:`long` or ``None``
        :param degraded_count: Degraded count format: int32
        :type  down_count: :class:`long` or ``None``
        :param down_count: Down count format: int32
        :type  down_pnics: :class:`list` of :class:`PnicBondStatus` or ``None``
        :param down_pnics: List Down or Degraded pnics
        :type  last_status_changed_time: :class:`long` or ``None``
        :param last_status_changed_time: Timestamp of the last status change, in epoch milliseconds format:
            int64
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`StatusCount.STATUS_UP`
            * :attr:`StatusCount.STATUS_DOWN`
            * :attr:`StatusCount.STATUS_DEGRADED`
            * :attr:`StatusCount.STATUS_UNKNOWN`
            
            Roll-up status
        :type  status_description: :class:`str` or ``None``
        :param status_description: Describe what makes the status not UP
        :type  up_count: :class:`long` or ``None``
        :param up_count: Up count format: int32
        """
        self.degraded_count = degraded_count
        self.down_count = down_count
        self.down_pnics = down_pnics
        self.last_status_changed_time = last_status_changed_time
        self.status = status
        self.status_description = status_description
        self.up_count = up_count
        VapiStruct.__init__(self)


StatusCount._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.status_count', {
        'degraded_count': type.OptionalType(type.IntegerType()),
        'down_count': type.OptionalType(type.IntegerType()),
        'down_pnics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PnicBondStatus'))),
        'last_status_changed_time': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
        'status_description': type.OptionalType(type.StringType()),
        'up_count': type.OptionalType(type.IntegerType()),
    },
    StatusCount,
    False,
    None))



class StorageClasses(VapiStruct):
    """
    List Kubernetes storage classes.

    .. 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',
                            'name': 'name',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 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_: 
        :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  name: :class:`list` of :class:`str` or ``None``
        :param name: List the name of storage classes
            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.name = name
        VapiStruct.__init__(self)


StorageClasses._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.storage_classes', {
        '_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()),
        'name': type.OptionalType(type.ListType(type.StringType())),
    },
    StorageClasses,
    False,
    None))



class StringArrayConstraintValue(VapiStruct):
    """
    List of String values

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StringArrayConstraintValue"
    """
    Identifier denoting this class, when it is used 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 = {
                            'values': 'values',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 values=None,
                 resource_type='StringArrayConstraintValue',
                ):
        """
        :type  values: :class:`list` of :class:`str` or ``None``
        :param values: Array of string values
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ConstraintValue.RESOURCE_TYPE_STRINGARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_CIDRARRAYCONSTRAINTVALUE`
            * :attr:`ConstraintValue.RESOURCE_TYPE_INTEGERARRAYCONSTRAINTVALUE`
        """
        self.values = values
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

StringArrayConstraintValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.string_array_constraint_value', {
        'values': type.OptionalType(type.ListType(type.StringType())),
        'resource_type': type.StringType(),
    },
    StringArrayConstraintValue,
    False,
    None))



class SubCluster(VapiStruct):
    """
    Sub-cluster is a grouping of discovered nodes under a compute collection.
    This grouping facilitates applying TransportNodeProfile sub-configurations
    for these grouped 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'compute_collection_id': 'compute_collection_id',
                            'sub_cluster_info': 'sub_cluster_info',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 compute_collection_id=None,
                 sub_cluster_info=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  compute_collection_id: :class:`str` or ``None``
        :param compute_collection_id: Compute collection ID under which sub-cluster is created. Maximum
            number of sub-clusters that can be created under a compute
            collection is 16.
        :type  sub_cluster_info: :class:`SubClusterInfo` or ``None``
        :param sub_cluster_info: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.compute_collection_id = compute_collection_id
        self.sub_cluster_info = sub_cluster_info
        VapiStruct.__init__(self)


SubCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sub_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'compute_collection_id': type.OptionalType(type.StringType()),
        'sub_cluster_info': type.OptionalType(type.ReferenceType(__name__, 'SubClusterInfo')),
    },
    SubCluster,
    False,
    None))



class SubClusterConfig(VapiStruct):
    """
    Represents a mapping between a sub-cluster and all applicable
    sub-configurations in the TNP.

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



    _canonical_to_pep_names = {
                            'host_switch_config_sources': 'host_switch_config_sources',
                            'sub_cluster_id': 'sub_cluster_id',
                            }

    def __init__(self,
                 host_switch_config_sources=None,
                 sub_cluster_id=None,
                ):
        """
        :type  host_switch_config_sources: :class:`list` of :class:`HostSwitchConfigSource` or ``None``
        :param host_switch_config_sources: List of overridden HostSwitch configuration
        :type  sub_cluster_id: :class:`str` or ``None``
        :param sub_cluster_id: sub-cluster Id
        """
        self.host_switch_config_sources = host_switch_config_sources
        self.sub_cluster_id = sub_cluster_id
        VapiStruct.__init__(self)


SubClusterConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sub_cluster_config', {
        'host_switch_config_sources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HostSwitchConfigSource'))),
        'sub_cluster_id': type.OptionalType(type.StringType()),
    },
    SubClusterConfig,
    False,
    None))



class SubClusterInfo(VapiStruct):
    """
    Sub-Cluster-info contains the sub-cluster type and the discovered node IDs
    for the hosts that belong to this sub-cluster.

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


    """



    _canonical_to_pep_names = {
                            'discovered_node_ids': 'discovered_node_ids',
                            'sub_cluster_type': 'sub_cluster_type',
                            }

    def __init__(self,
                 discovered_node_ids=None,
                 sub_cluster_type=None,
                ):
        """
        :type  discovered_node_ids: :class:`list` of :class:`str` or ``None``
        :param discovered_node_ids: Discovered node IDs under this sub-cluster. This is an optional
            field.
        :type  sub_cluster_type: :class:`str` or ``None``
        :param sub_cluster_type: Possible values are: 
            
            * :attr:`SubClusterInfo.SUB_CLUSTER_TYPE_MANUAL`
            
            Sub-cluster-type can be either MANUAL or FAULT_DOMAIN. This is a
            mandatory field. Currently, all sub-clusters will be of type
            MANUAL. In the future, we will provide support for creating a
            sub-cluster for fault domains in VC. This field indicates the same.
        """
        self.discovered_node_ids = discovered_node_ids
        self.sub_cluster_type = sub_cluster_type
        VapiStruct.__init__(self)


SubClusterInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sub_cluster_info', {
        'discovered_node_ids': type.OptionalType(type.ListType(type.StringType())),
        'sub_cluster_type': type.OptionalType(type.StringType()),
    },
    SubClusterInfo,
    False,
    None))



class SubClusterListResult(VapiStruct):
    """
    This is the list of sub-clusters in the system.

    .. 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_: 
        :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:`SubCluster` or ``None``
        :param results: SubCluster 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)


SubClusterListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.sub_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__, 'SubCluster'))),
    },
    SubClusterListResult,
    False,
    None))



class SubjectPublicKeyHash(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'public_key_sha256_hashes': 'public_key_sha256_hashes',
                            'subject': 'subject',
                            }

    def __init__(self,
                 public_key_sha256_hashes=None,
                 subject=None,
                ):
        """
        :type  public_key_sha256_hashes: :class:`list` of :class:`str` or ``None``
        :param public_key_sha256_hashes: List of SHA256 hashes of the Public Key of the revoked certificates
            with the specified subject.
        :type  subject: :class:`str` or ``None``
        :param subject: Subject Distinguished Name of the revoked certificates.
        """
        self.public_key_sha256_hashes = public_key_sha256_hashes
        self.subject = subject
        VapiStruct.__init__(self)


SubjectPublicKeyHash._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.subject_public_key_hash', {
        'public_key_sha256_hashes': type.OptionalType(type.ListType(type.StringType())),
        'subject': type.OptionalType(type.StringType()),
    },
    SubjectPublicKeyHash,
    False,
    None))



class SubnetAdvancedConfig(VapiStruct):
    """
    VPC Subnet Advanced Configuration

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



    _canonical_to_pep_names = {
                            'static_ip_allocation': 'static_ip_allocation',
                            }

    def __init__(self,
                 static_ip_allocation=None,
                ):
        """
        :type  static_ip_allocation: :class:`StaticIpAllocation` or ``None``
        :param static_ip_allocation: 
        """
        self.static_ip_allocation = static_ip_allocation
        VapiStruct.__init__(self)


SubnetAdvancedConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.subnet_advanced_config', {
        'static_ip_allocation': type.OptionalType(type.ReferenceType(__name__, 'StaticIpAllocation')),
    },
    SubnetAdvancedConfig,
    False,
    None))



class SubnetProfiles(VapiStruct):
    """
    Profile references will be applied to subnets. If not specified by the
    user, default profiles will be used.

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



    _canonical_to_pep_names = {
                            'ip_discovery': 'ip_discovery',
                            'mac_discovery': 'mac_discovery',
                            'qos': 'qos',
                            'segment_security': 'segment_security',
                            'spoof_guard': 'spoof_guard',
                            }

    def __init__(self,
                 ip_discovery=None,
                 mac_discovery=None,
                 qos=None,
                 segment_security=None,
                 spoof_guard=None,
                ):
        """
        :type  ip_discovery: :class:`str` or ``None``
        :param ip_discovery: Using this profile to configure different options of IP Discovery
        :type  mac_discovery: :class:`str` or ``None``
        :param mac_discovery: Mac Discovery Profile
        :type  qos: :class:`str` or ``None``
        :param qos: Segment Qos Profile
        :type  segment_security: :class:`str` or ``None``
        :param segment_security: Security features are extended by policy operations for securing
            logical segments.
        :type  spoof_guard: :class:`str` or ``None``
        :param spoof_guard: 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.
        """
        self.ip_discovery = ip_discovery
        self.mac_discovery = mac_discovery
        self.qos = qos
        self.segment_security = segment_security
        self.spoof_guard = spoof_guard
        VapiStruct.__init__(self)


SubnetProfiles._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.subnet_profiles', {
        'ip_discovery': type.OptionalType(type.StringType()),
        'mac_discovery': type.OptionalType(type.StringType()),
        'qos': type.OptionalType(type.StringType()),
        'segment_security': type.OptionalType(type.StringType()),
        'spoof_guard': type.OptionalType(type.StringType()),
    },
    SubnetProfiles,
    False,
    None))



class SubnetStatistics(VapiStruct):
    """
    VPC Subnet statistics

    .. 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_firewall_packets': 'dropped_by_firewall_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',
                            'nsxt_swsec': 'nsxt_swsec',
                            'nsxt_vdl2': 'nsxt_vdl2',
                            'nsxt_vdrb': 'nsxt_vdrb',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_firewall_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 last_update_timestamp=None,
                 logical_switch_id=None,
                 nsxt_swsec=None,
                 nsxt_vdl2=None,
                 nsxt_vdrb=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_firewall_packets: :class:`DfwDropCounters` or ``None``
        :param dropped_by_firewall_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.
        :type  nsxt_swsec: :class:`SwsecCounters` or ``None``
        :param nsxt_swsec: 
        :type  nsxt_vdl2: :class:`Vdl2Counters` or ``None``
        :param nsxt_vdl2: 
        :type  nsxt_vdrb: :class:`VdrbCounters` or ``None``
        :param nsxt_vdrb: 
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_firewall_packets = dropped_by_firewall_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
        self.nsxt_swsec = nsxt_swsec
        self.nsxt_vdl2 = nsxt_vdl2
        self.nsxt_vdrb = nsxt_vdrb
        VapiStruct.__init__(self)


SubnetStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.subnet_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_firewall_packets': type.OptionalType(type.ReferenceType(__name__, 'DfwDropCounters')),
        '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()),
        'nsxt_swsec': type.OptionalType(type.ReferenceType(__name__, 'SwsecCounters')),
        'nsxt_vdl2': type.OptionalType(type.ReferenceType(__name__, 'Vdl2Counters')),
        'nsxt_vdrb': type.OptionalType(type.ReferenceType(__name__, 'VdrbCounters')),
    },
    SubnetStatistics,
    False,
    None))



class SwitchingProfileTypeIdEntry(VapiStruct):
    """


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


    """
    KEY_PORTMIRRORINGSWITCHINGPROFILE = "PortMirroringSwitchingProfile"
    """


    """
    KEY_IPDISCOVERYSWITCHINGPROFILE = "IpDiscoverySwitchingProfile"
    """


    """
    KEY_SPOOFGUARDSWITCHINGPROFILE = "SpoofGuardSwitchingProfile"
    """


    """
    KEY_SWITCHSECURITYSWITCHINGPROFILE = "SwitchSecuritySwitchingProfile"
    """


    """
    KEY_MACMANAGEMENTSWITCHINGPROFILE = "MacManagementSwitchingProfile"
    """


    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'value': 'value',
                            }

    def __init__(self,
                 key=None,
                 value=None,
                ):
        """
        :type  key: :class:`str` or ``None``
        :param key: Possible values are: 
            
            * :attr:`SwitchingProfileTypeIdEntry.KEY_QOSSWITCHINGPROFILE`
            *
              :attr:`SwitchingProfileTypeIdEntry.KEY_PORTMIRRORINGSWITCHINGPROFILE`
            *
              :attr:`SwitchingProfileTypeIdEntry.KEY_IPDISCOVERYSWITCHINGPROFILE`
            *
              :attr:`SwitchingProfileTypeIdEntry.KEY_SPOOFGUARDSWITCHINGPROFILE`
            *
              :attr:`SwitchingProfileTypeIdEntry.KEY_SWITCHSECURITYSWITCHINGPROFILE`
            *
              :attr:`SwitchingProfileTypeIdEntry.KEY_MACMANAGEMENTSWITCHINGPROFILE`
            
            Supported switching profiles. 'PortMirroringSwitchingProfile' is
            deprecated, please turn to \"Troubleshooting And Monitoring:
            Portmirroring\" and use PortMirroringSession API for port mirror
            function.
        :type  value: :class:`str` or ``None``
        :param value: key value
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


SwitchingProfileTypeIdEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.switching_profile_type_id_entry', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    SwitchingProfileTypeIdEntry,
    False,
    None))



class SwsecCounters(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'bpdu_filter_drops': 'bpdu_filter_drops',
                            'dhcp_client_block_ipv4_drops': 'dhcp_client_block_ipv4_drops',
                            'dhcp_client_block_ipv6_drops': 'dhcp_client_block_ipv6_drops',
                            'dhcp_client_validate_ipv4_drops': 'dhcp_client_validate_ipv4_drops',
                            'dhcp_server_block_ipv4_drops': 'dhcp_server_block_ipv4_drops',
                            'dhcp_server_block_ipv6_drops': 'dhcp_server_block_ipv6_drops',
                            'nd_parse_errors': 'nd_parse_errors',
                            'ra_guard_drops': 'ra_guard_drops',
                            'rx_arp_pkts': 'rx_arp_pkts',
                            'rx_ipv4_pkts': 'rx_ipv4_pkts',
                            'rx_ipv6_pkts': 'rx_ipv6_pkts',
                            'rx_non_ip_pkts': 'rx_non_ip_pkts',
                            'rx_rate_limit_bcast_drops': 'rx_rate_limit_bcast_drops',
                            'rx_rate_limit_mcast_drops': 'rx_rate_limit_mcast_drops',
                            'spoof_guard_arp_drops': 'spoof_guard_arp_drops',
                            'spoof_guard_ipv4_drops': 'spoof_guard_ipv4_drops',
                            'spoof_guard_ipv6_drops': 'spoof_guard_ipv6_drops',
                            'spoof_guard_nd_drops': 'spoof_guard_nd_drops',
                            'spoof_guard_non_ip_drops': 'spoof_guard_non_ip_drops',
                            'tx_arp_pkts': 'tx_arp_pkts',
                            'tx_garp_pkts': 'tx_garp_pkts',
                            'tx_ipv4_pkts': 'tx_ipv4_pkts',
                            'tx_ipv6_pkts': 'tx_ipv6_pkts',
                            'tx_na_pkts': 'tx_na_pkts',
                            'tx_non_ip_pkts': 'tx_non_ip_pkts',
                            'tx_ns_pkts': 'tx_ns_pkts',
                            'tx_rate_limit_bcast_drops': 'tx_rate_limit_bcast_drops',
                            'tx_rate_limit_mcast_drops': 'tx_rate_limit_mcast_drops',
                            'tx_unsolicited_na_pkts': 'tx_unsolicited_na_pkts',
                            }

    def __init__(self,
                 bpdu_filter_drops=None,
                 dhcp_client_block_ipv4_drops=None,
                 dhcp_client_block_ipv6_drops=None,
                 dhcp_client_validate_ipv4_drops=None,
                 dhcp_server_block_ipv4_drops=None,
                 dhcp_server_block_ipv6_drops=None,
                 nd_parse_errors=None,
                 ra_guard_drops=None,
                 rx_arp_pkts=None,
                 rx_ipv4_pkts=None,
                 rx_ipv6_pkts=None,
                 rx_non_ip_pkts=None,
                 rx_rate_limit_bcast_drops=None,
                 rx_rate_limit_mcast_drops=None,
                 spoof_guard_arp_drops=None,
                 spoof_guard_ipv4_drops=None,
                 spoof_guard_ipv6_drops=None,
                 spoof_guard_nd_drops=None,
                 spoof_guard_non_ip_drops=None,
                 tx_arp_pkts=None,
                 tx_garp_pkts=None,
                 tx_ipv4_pkts=None,
                 tx_ipv6_pkts=None,
                 tx_na_pkts=None,
                 tx_non_ip_pkts=None,
                 tx_ns_pkts=None,
                 tx_rate_limit_bcast_drops=None,
                 tx_rate_limit_mcast_drops=None,
                 tx_unsolicited_na_pkts=None,
                ):
        """
        :type  bpdu_filter_drops: :class:`long` or ``None``
        :param bpdu_filter_drops: Number of packets dropped by BPDU Filtering. When the BPDU Filter
            is enabled, traffic to the configured BPDU destination MAC
            addresses format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dhcp_client_block_ipv4_drops: :class:`long` or ``None``
        :param dhcp_client_block_ipv4_drops: Number of IPv4 DHCP packets dropped by DHCP Client Block. DHCP
            Client Block prevents a VM from acquiring DHCP IP address by
            blocking DHCP 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  dhcp_client_block_ipv6_drops: :class:`long` or ``None``
        :param dhcp_client_block_ipv6_drops: Number of DHCPv6 packets dropped by DHCP Client Block. DHCP Client
            Block prevents a VM from acquiring DHCP IP address by blocking DHCP
            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  dhcp_client_validate_ipv4_drops: :class:`long` or ``None``
        :param dhcp_client_validate_ipv4_drops: Number of IPv4 DHCP packets dropped because addresses in the
            payload were not 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  dhcp_server_block_ipv4_drops: :class:`long` or ``None``
        :param dhcp_server_block_ipv4_drops: Number of IPv4 DHCP packets dropped by DHCP Server Block. DHCP
            Server Block blocks traffic from a DHCP Server to a DHCP Client
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dhcp_server_block_ipv6_drops: :class:`long` or ``None``
        :param dhcp_server_block_ipv6_drops: Number of DHCPv6 packets dropped by DHCP Server Block. DHCP Server
            Block blocks traffic from a DHCP Server to a DHCP Client format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nd_parse_errors: :class:`long` or ``None``
        :param nd_parse_errors: Number of IPv 6 Router Advertisement packets dropped by RA Guard.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ra_guard_drops: :class:`long` or ``None``
        :param ra_guard_drops: Number of IPv6 Neighbor Discovery (ND) packets which were not
            correctly parsed format: int64
            This 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_arp_pkts: :class:`long` or ``None``
        :param rx_arp_pkts: Number of transmitted IPv6 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  rx_ipv4_pkts: :class:`long` or ``None``
        :param rx_ipv4_pkts: Number of received IPv4 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  rx_ipv6_pkts: :class:`long` or ``None``
        :param rx_ipv6_pkts: Number of received IPv6 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  rx_non_ip_pkts: :class:`long` or ``None``
        :param rx_non_ip_pkts: Number of transmitted Gratuitous ARP (GARP) 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  rx_rate_limit_bcast_drops: :class:`long` or ``None``
        :param rx_rate_limit_bcast_drops: Number of ingress packets dropped by broadcast Rate Limiting
            format: int64
            This 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_rate_limit_mcast_drops: :class:`long` or ``None``
        :param rx_rate_limit_mcast_drops: Number of ingress packets dropped by multicast Rate Limiting
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoof_guard_arp_drops: :class:`long` or ``None``
        :param spoof_guard_arp_drops: Number of IPv6 packets dropped by Spoof Guard. SpoofGuard protects
            against IP spoofing by maintaining a reference table of , VM names
            and IP addresses format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoof_guard_ipv4_drops: :class:`long` or ``None``
        :param spoof_guard_ipv4_drops: Number of IPv4 packets dropped by Spoof Guard. SpoofGuard protects
            against IP spoofing by maintaining a reference table of , VM names
            and IP addresses format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoof_guard_ipv6_drops: :class:`long` or ``None``
        :param spoof_guard_ipv6_drops: Number of IPv6 Neighbor Discovery (ND) packets dropped by Spoof
            Guard. SpoofGuard protects against ND Spoofing by filtering out ND
            packets whose addresses, do not match the VM's address format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoof_guard_nd_drops: :class:`long` or ``None``
        :param spoof_guard_nd_drops: Number of ARP packets dropped by Spoof Guard. Spoof Guard protects
            against malicious ARP spoofing attacks by keeping track of , MAC
            and IP addresses format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoof_guard_non_ip_drops: :class:`long` or ``None``
        :param spoof_guard_non_ip_drops: Number of Non-IP packets dropped by Spoof Guard format: int64
            This 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_arp_pkts: :class:`long` or ``None``
        :param tx_arp_pkts: Number of received ARP 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  tx_garp_pkts: :class:`long` or ``None``
        :param tx_garp_pkts: Number of transmitted ARP 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  tx_ipv4_pkts: :class:`long` or ``None``
        :param tx_ipv4_pkts: Number of transmitted IPv4 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  tx_ipv6_pkts: :class:`long` or ``None``
        :param tx_ipv6_pkts: Number of received non-IP 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  tx_na_pkts: :class:`long` or ``None``
        :param tx_na_pkts: Number of IPv6 ND (Neighbor Discovery) NA (Neighbor Advertisement)
            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  tx_non_ip_pkts: :class:`long` or ``None``
        :param tx_non_ip_pkts: Number of transmitted non-IP 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  tx_ns_pkts: :class:`long` or ``None``
        :param tx_ns_pkts: Number of IPv6 ND (Neighbor Discovery) NS (Neighbor Solicitation)
            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  tx_rate_limit_bcast_drops: :class:`long` or ``None``
        :param tx_rate_limit_bcast_drops: Number of egress packets dropped by broadcast Rate Limiting format:
            int64
            This 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_rate_limit_mcast_drops: :class:`long` or ``None``
        :param tx_rate_limit_mcast_drops: Number of egress packets dropped by multicast Rate Limiting format:
            int64
            This 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_unsolicited_na_pkts: :class:`long` or ``None``
        :param tx_unsolicited_na_pkts: Number of IPv6 ND (Neighbor Discovery) NA (Neighbor Advertisement)
            packets which, were unsolicited format: int64
            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.bpdu_filter_drops = bpdu_filter_drops
        self.dhcp_client_block_ipv4_drops = dhcp_client_block_ipv4_drops
        self.dhcp_client_block_ipv6_drops = dhcp_client_block_ipv6_drops
        self.dhcp_client_validate_ipv4_drops = dhcp_client_validate_ipv4_drops
        self.dhcp_server_block_ipv4_drops = dhcp_server_block_ipv4_drops
        self.dhcp_server_block_ipv6_drops = dhcp_server_block_ipv6_drops
        self.nd_parse_errors = nd_parse_errors
        self.ra_guard_drops = ra_guard_drops
        self.rx_arp_pkts = rx_arp_pkts
        self.rx_ipv4_pkts = rx_ipv4_pkts
        self.rx_ipv6_pkts = rx_ipv6_pkts
        self.rx_non_ip_pkts = rx_non_ip_pkts
        self.rx_rate_limit_bcast_drops = rx_rate_limit_bcast_drops
        self.rx_rate_limit_mcast_drops = rx_rate_limit_mcast_drops
        self.spoof_guard_arp_drops = spoof_guard_arp_drops
        self.spoof_guard_ipv4_drops = spoof_guard_ipv4_drops
        self.spoof_guard_ipv6_drops = spoof_guard_ipv6_drops
        self.spoof_guard_nd_drops = spoof_guard_nd_drops
        self.spoof_guard_non_ip_drops = spoof_guard_non_ip_drops
        self.tx_arp_pkts = tx_arp_pkts
        self.tx_garp_pkts = tx_garp_pkts
        self.tx_ipv4_pkts = tx_ipv4_pkts
        self.tx_ipv6_pkts = tx_ipv6_pkts
        self.tx_na_pkts = tx_na_pkts
        self.tx_non_ip_pkts = tx_non_ip_pkts
        self.tx_ns_pkts = tx_ns_pkts
        self.tx_rate_limit_bcast_drops = tx_rate_limit_bcast_drops
        self.tx_rate_limit_mcast_drops = tx_rate_limit_mcast_drops
        self.tx_unsolicited_na_pkts = tx_unsolicited_na_pkts
        VapiStruct.__init__(self)


SwsecCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.swsec_counters', {
        'bpdu_filter_drops': type.OptionalType(type.IntegerType()),
        'dhcp_client_block_ipv4_drops': type.OptionalType(type.IntegerType()),
        'dhcp_client_block_ipv6_drops': type.OptionalType(type.IntegerType()),
        'dhcp_client_validate_ipv4_drops': type.OptionalType(type.IntegerType()),
        'dhcp_server_block_ipv4_drops': type.OptionalType(type.IntegerType()),
        'dhcp_server_block_ipv6_drops': type.OptionalType(type.IntegerType()),
        'nd_parse_errors': type.OptionalType(type.IntegerType()),
        'ra_guard_drops': type.OptionalType(type.IntegerType()),
        'rx_arp_pkts': type.OptionalType(type.IntegerType()),
        'rx_ipv4_pkts': type.OptionalType(type.IntegerType()),
        'rx_ipv6_pkts': type.OptionalType(type.IntegerType()),
        'rx_non_ip_pkts': type.OptionalType(type.IntegerType()),
        'rx_rate_limit_bcast_drops': type.OptionalType(type.IntegerType()),
        'rx_rate_limit_mcast_drops': type.OptionalType(type.IntegerType()),
        'spoof_guard_arp_drops': type.OptionalType(type.IntegerType()),
        'spoof_guard_ipv4_drops': type.OptionalType(type.IntegerType()),
        'spoof_guard_ipv6_drops': type.OptionalType(type.IntegerType()),
        'spoof_guard_nd_drops': type.OptionalType(type.IntegerType()),
        'spoof_guard_non_ip_drops': type.OptionalType(type.IntegerType()),
        'tx_arp_pkts': type.OptionalType(type.IntegerType()),
        'tx_garp_pkts': type.OptionalType(type.IntegerType()),
        'tx_ipv4_pkts': type.OptionalType(type.IntegerType()),
        'tx_ipv6_pkts': type.OptionalType(type.IntegerType()),
        'tx_na_pkts': type.OptionalType(type.IntegerType()),
        'tx_non_ip_pkts': type.OptionalType(type.IntegerType()),
        'tx_ns_pkts': type.OptionalType(type.IntegerType()),
        'tx_rate_limit_bcast_drops': type.OptionalType(type.IntegerType()),
        'tx_rate_limit_mcast_drops': type.OptionalType(type.IntegerType()),
        'tx_unsolicited_na_pkts': type.OptionalType(type.IntegerType()),
    },
    SwsecCounters,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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: 
        """
        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_: 
        :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_: 
        :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_: 
        :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 TeamingPolicy(VapiStruct):
    """
    Uplink Teaming Policy

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


    """
    POLICY_LOADBALANCE_SRCID = "LOADBALANCE_SRCID"
    """


    """
    POLICY_LOADBALANCE_SRC_MAC = "LOADBALANCE_SRC_MAC"
    """


    """



    _canonical_to_pep_names = {
                            'active_list': 'active_list',
                            'policy': 'policy',
                            'rolling_order': 'rolling_order',
                            'standby_list': 'standby_list',
                            }

    def __init__(self,
                 active_list=None,
                 policy=None,
                 rolling_order=None,
                 standby_list=None,
                ):
        """
        :type  active_list: :class:`list` of :class:`Uplink` or ``None``
        :param active_list: List of Uplinks used in active list
        :type  policy: :class:`str` or ``None``
        :param policy: Possible values are: 
            
            * :attr:`TeamingPolicy.POLICY_FAILOVER_ORDER`
            * :attr:`TeamingPolicy.POLICY_LOADBALANCE_SRCID`
            * :attr:`TeamingPolicy.POLICY_LOADBALANCE_SRC_MAC`
            
            Teaming policy
        :type  rolling_order: :class:`bool` or ``None``
        :param rolling_order: Flag for preemptive mode
        :type  standby_list: :class:`list` of :class:`Uplink` or ``None``
        :param standby_list: List of Uplinks used in standby list
        """
        self.active_list = active_list
        self.policy = policy
        self.rolling_order = rolling_order
        self.standby_list = standby_list
        VapiStruct.__init__(self)


TeamingPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.teaming_policy', {
        'active_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Uplink'))),
        'policy': type.OptionalType(type.StringType()),
        'rolling_order': type.OptionalType(type.BooleanType()),
        'standby_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Uplink'))),
    },
    TeamingPolicy,
    False,
    None))



class ThreatStatus(VapiStruct):
    """


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


    """
    STATUS_ABNORMAL = "ABNORMAL"
    """


    """



    _canonical_to_pep_names = {
                            'status': 'status',
                            }

    def __init__(self,
                 status=None,
                ):
        """
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`ThreatStatus.STATUS_NORMAL`
            * :attr:`ThreatStatus.STATUS_ABNORMAL`
            
            Transport node threat status
        """
        self.status = status
        VapiStruct.__init__(self)


ThreatStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.threat_status', {
        'status': type.OptionalType(type.StringType()),
    },
    ThreatStatus,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'advanced_config': 'advanced_config',
                            'arp_limit': 'arp_limit',
                            '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',
                            'stateful_services': 'stateful_services',
                            'transit_subnets': 'transit_subnets',
                            'vrf_config': 'vrf_config',
                            'vrf_transit_subnets': 'vrf_transit_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 advanced_config=None,
                 arp_limit=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,
                 stateful_services=None,
                 transit_subnets=None,
                 vrf_config=None,
                 vrf_transit_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  advanced_config: :class:`Tier0AdvancedConfig` or ``None``
        :param advanced_config: 
        :type  arp_limit: :class:`long` or ``None``
        :param arp_limit: Maximum number of ARP entries per transport node. format: int32
        :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.

            .. deprecated:: unknown
        :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: 
        :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.

            .. deprecated:: unknown
        :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: 
        :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  stateful_services: :class:`Tier0StatefulServicesConfig` or ``None``
        :param stateful_services: 
        :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. When modifying, for stateful
            active-active Tier-0 number of IPs should be at least attached
            Tier-1s count \* 16 and for other type of Tier-0 number of IPs
            should be at least attached Tier-1s count \* 2. Modification not
            allowed if there are child tier-0 VRFs and there are any Tier-1s
            connected to those VRFs. The value in VRF tier-0 is always
            inherited from the parent. format: ip-cidr-block
        :type  vrf_config: :class:`Tier0VrfConfig` or ``None``
        :param vrf_config: 
        :type  vrf_transit_subnets: :class:`list` of :class:`str` or ``None``
        :param vrf_transit_subnets: Specify subnets that are used to assign addresses to logical links
            connecting default T0 and child VRFs. When not specified, subnet
            169.254.2.0/23 is assigned by default. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.advanced_config = advanced_config
        self.arp_limit = arp_limit
        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.stateful_services = stateful_services
        self.transit_subnets = transit_subnets
        self.vrf_config = vrf_config
        self.vrf_transit_subnets = vrf_transit_subnets
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'advanced_config': type.OptionalType(type.ReferenceType(__name__, 'Tier0AdvancedConfig')),
        'arp_limit': type.OptionalType(type.IntegerType()),
        '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()),
        'stateful_services': type.OptionalType(type.ReferenceType(__name__, 'Tier0StatefulServicesConfig')),
        'transit_subnets': type.OptionalType(type.ListType(type.StringType())),
        'vrf_config': type.OptionalType(type.ReferenceType(__name__, 'Tier0VrfConfig')),
        'vrf_transit_subnets': type.OptionalType(type.ListType(type.StringType())),
    },
    Tier0,
    False,
    None))



class Tier0AdvancedConfig(VapiStruct):
    """
    NSX specific configuration for tier-0

    .. 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',
                            'forwarding_up_timer': 'forwarding_up_timer',
                            }

    def __init__(self,
                 connectivity=None,
                 forwarding_up_timer=None,
                ):
        """
        :type  connectivity: :class:`str` or ``None``
        :param connectivity: Possible values are: 
            
            * :attr:`Tier0AdvancedConfig.CONNECTIVITY_ON`
            * :attr:`Tier0AdvancedConfig.CONNECTIVITY_OFF`
            
            Connectivity configuration to manually connect (ON) or disconnect
            (OFF) Tier-0/Tier1 segment from corresponding gateway. This
            property does not apply to VLAN backed segments. VLAN backed
            segments with connectivity OFF does not affect its layer-2
            connectivity.
        :type  forwarding_up_timer: :class:`long` or ``None``
        :param forwarding_up_timer: Extra time in seconds the router must wait before sending the UP
            notification after the peer routing session is established. Default
            means forward immediately. VRF logical router will set it same as
            parent logical router. format: int64
        """
        self.connectivity = connectivity
        self.forwarding_up_timer = forwarding_up_timer
        VapiStruct.__init__(self)


Tier0AdvancedConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_advanced_config', {
        'connectivity': type.OptionalType(type.StringType()),
        'forwarding_up_timer': type.OptionalType(type.IntegerType()),
    },
    Tier0AdvancedConfig,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 = {
                            'auto_rds': 'auto_rds',
                            'enforcement_point_path': 'enforcement_point_path',
                            'ipv6_status': 'ipv6_status',
                            'tier0_state': 'tier0_state',
                            'tier0_status': 'tier0_status',
                            'transport_zone': 'transport_zone',
                            }

    def __init__(self,
                 auto_rds=None,
                 enforcement_point_path=None,
                 ipv6_status=None,
                 tier0_state=None,
                 tier0_status=None,
                 transport_zone=None,
                ):
        """
        :type  auto_rds: :class:`AutoRds` or ``None``
        :param auto_rds: 
        :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: 
        :type  tier0_status: :class:`LogicalRouterStatus` or ``None``
        :param tier0_status: 
        :type  transport_zone: :class:`PolicyTransportZone` or ``None``
        :param transport_zone: 
        """
        self.auto_rds = auto_rds
        self.enforcement_point_path = enforcement_point_path
        self.ipv6_status = ipv6_status
        self.tier0_state = tier0_state
        self.tier0_status = tier0_status
        self.transport_zone = transport_zone
        VapiStruct.__init__(self)


Tier0GatewayState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_gateway_state', {
        'auto_rds': type.OptionalType(type.ReferenceType(__name__, 'AutoRds')),
        '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')),
        'transport_zone': type.OptionalType(type.ReferenceType(__name__, 'PolicyTransportZone')),
    },
    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.
    """
    ADMIN_STATE_UP = "UP"
    """


    """
    ADMIN_STATE_DOWN = "DOWN"
    """


    """
    TYPE_EXTERNAL = "EXTERNAL"
    """


    """
    TYPE_SERVICE = "SERVICE"
    """


    """
    TYPE_LOOPBACK = "LOOPBACK"
    """


    """
    TYPE_INTERVRF = "INTERVRF"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dhcp_relay_path': 'dhcp_relay_path',
                            'subnets': 'subnets',
                            'access_vlan_id': 'access_vlan_id',
                            'admin_state': 'admin_state',
                            'edge_cluster_member_index': 'edge_cluster_member_index',
                            'edge_path': 'edge_path',
                            'igmp_local_join_groups': 'igmp_local_join_groups',
                            'ipv6_profile_paths': 'ipv6_profile_paths',
                            'ls_id': 'ls_id',
                            'mtu': 'mtu',
                            'multicast': 'multicast',
                            'ospf': 'ospf',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dhcp_relay_path=None,
                 subnets=None,
                 access_vlan_id=None,
                 admin_state=None,
                 edge_cluster_member_index=None,
                 edge_path=None,
                 igmp_local_join_groups=None,
                 ipv6_profile_paths=None,
                 ls_id=None,
                 mtu=None,
                 multicast=None,
                 ospf=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  dhcp_relay_path: :class:`str` or ``None``
        :param dhcp_relay_path: Policy path of dhcp-relay-config to be attached to this Interface.
        :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  admin_state: :class:`str` or ``None``
        :param admin_state: Possible values are: 
            
            * :attr:`Tier0Interface.ADMIN_STATE_UP`
            * :attr:`Tier0Interface.ADMIN_STATE_DOWN`
            
            This flag is used to enable/disable admin state on tier-0 service
            port. If admin_state flag value is not specified then default is
            UP. When set to UP then traffic on service port will be enabled and
            service port is enabled from routing perspective. When set to DOWN
            then traffic on service port will be disabled and service port is
            down from routing perspective. This flag is experimental because it
            will be used in V2T BYOT migration. This flag should not be set to
            UP or DOWN if EVPN is configured, and tier-0 LR is in A/S mode.
            Also this flag can not be set to UP or DOWN for service interfaces
            which are configured on vrf-lite.
        :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

            .. deprecated:: unknown
        :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. Edge path is required for service
            interface when tier0 is in ACTIVE_ACTIVE ha_mode. Edge path is
            required for VRF service interface when parent tier0 is in
            ACTIVE_ACTIVE ha_mode.
        :type  igmp_local_join_groups: :class:`list` of :class:`str` or ``None``
        :param igmp_local_join_groups: IGMP local join groups configuration. format: ipv4
        :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.

            .. deprecated:: unknown
        :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: 
        :type  ospf: :class:`PolicyInterfaceOspfConfig` or ``None``
        :param ospf: 
        :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`
            * :attr:`Tier0Interface.TYPE_INTERVRF`
            
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dhcp_relay_path = dhcp_relay_path
        self.subnets = subnets
        self.access_vlan_id = access_vlan_id
        self.admin_state = admin_state
        self.edge_cluster_member_index = edge_cluster_member_index
        self.edge_path = edge_path
        self.igmp_local_join_groups = igmp_local_join_groups
        self.ipv6_profile_paths = ipv6_profile_paths
        self.ls_id = ls_id
        self.mtu = mtu
        self.multicast = multicast
        self.ospf = ospf
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'dhcp_relay_path': type.OptionalType(type.StringType()),
        'subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
        'access_vlan_id': type.OptionalType(type.IntegerType()),
        'admin_state': type.OptionalType(type.StringType()),
        'edge_cluster_member_index': type.OptionalType(type.IntegerType()),
        'edge_path': type.OptionalType(type.StringType()),
        'igmp_local_join_groups': type.OptionalType(type.ListType(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')),
        'ospf': type.OptionalType(type.ReferenceType(__name__, 'PolicyInterfaceOspfConfig')),
        '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 Tier0InterfaceGroup(VapiStruct):
    """
    Tier0 Interface group for interface grouping.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`GatewayInterfaceReference` or ``None``
        :param members: List of interface reference. Interface must belong to same
            location.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


Tier0InterfaceGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_interface_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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.ReferenceType(__name__, 'GatewayInterfaceReference'))),
    },
    Tier0InterfaceGroup,
    False,
    None))



class Tier0InterfaceGroupListResult(VapiStruct):
    """
    Paged collection of Tier-0 Interface 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_: 
        :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:`Tier0InterfaceGroup` or ``None``
        :param results: Tier-0 Interface 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)


Tier0InterfaceGroupListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_interface_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__, 'Tier0InterfaceGroup'))),
    },
    Tier0InterfaceGroupListResult,
    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_: 
        :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',
                            'hello_interval': 'hello_interval',
                            'hold_interval': 'hold_interval',
                            }

    def __init__(self,
                 enabled=None,
                 hello_interval=None,
                 hold_interval=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: enable/disable PIM configuration.
        :type  hello_interval: :class:`long` or ``None``
        :param hello_interval: PIM hello interval(seconds) at interface level. format: int32
        :type  hold_interval: :class:`long` or ``None``
        :param hold_interval: PIM hold interval(seconds) at interface level. format: int32
        """
        self.enabled = enabled
        self.hello_interval = hello_interval
        self.hold_interval = hold_interval
        VapiStruct.__init__(self)


Tier0InterfacePimConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_interface_pim_config', {
        'enabled': type.OptionalType(type.BooleanType()),
        'hello_interval': type.OptionalType(type.IntegerType()),
        'hold_interval': type.OptionalType(type.IntegerType()),
    },
    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_: 
        :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 Tier0NumberOfRoutesResult(VapiStruct):
    """
    Tier 0 Number Of Routes Request Result

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



    _canonical_to_pep_names = {
                            'number_of_ipv4': 'number_of_ipv4',
                            'number_of_ipv6': 'number_of_ipv6',
                            }

    def __init__(self,
                 number_of_ipv4=None,
                 number_of_ipv6=None,
                ):
        """
        :type  number_of_ipv4: :class:`long` or ``None``
        :param number_of_ipv4: Number of IPV4 Routes format: int64
        :type  number_of_ipv6: :class:`long` or ``None``
        :param number_of_ipv6: Number of IPV6 Routes format: int64
        """
        self.number_of_ipv4 = number_of_ipv4
        self.number_of_ipv6 = number_of_ipv6
        VapiStruct.__init__(self)


Tier0NumberOfRoutesResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_number_of_routes_result', {
        'number_of_ipv4': type.OptionalType(type.IntegerType()),
        'number_of_ipv6': type.OptionalType(type.IntegerType()),
    },
    Tier0NumberOfRoutesResult,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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',
                            'ospf_enabled': 'ospf_enabled',
                            'redistribution_rules': 'redistribution_rules',
                            }

    def __init__(self,
                 bgp_enabled=None,
                 ospf_enabled=None,
                 redistribution_rules=None,
                ):
        """
        :type  bgp_enabled: :class:`bool` or ``None``
        :param bgp_enabled: Flag to enable route redistribution for BGP.
        :type  ospf_enabled: :class:`bool` or ``None``
        :param ospf_enabled: Flag to enable route redistribution for OSPF.
        :type  redistribution_rules: :class:`list` of :class:`Tier0RouteRedistributionRule` or ``None``
        :param redistribution_rules: List of redistribution rules.
        """
        self.bgp_enabled = bgp_enabled
        self.ospf_enabled = ospf_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()),
        'ospf_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.
    """
    DESTINATIONS_BGP = "BGP"
    """


    """
    DESTINATIONS_OSPF = "OSPF"
    """


    """
    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"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_INTER_VRF_STATIC = "INTER_VRF_STATIC"
    """


    """



    _canonical_to_pep_names = {
                            'destinations': 'destinations',
                            'name': 'name',
                            'route_map_path': 'route_map_path',
                            'route_redistribution_types': 'route_redistribution_types',
                            }

    def __init__(self,
                 destinations=None,
                 name=None,
                 route_map_path=None,
                 route_redistribution_types=None,
                ):
        """
        :type  destinations: :class:`list` of :class:`str` or ``None``
        :param destinations: Possible values are: 
            
            * :attr:`Tier0RouteRedistributionRule.DESTINATIONS_BGP`
            * :attr:`Tier0RouteRedistributionRule.DESTINATIONS_OSPF`
            
            Each rule can have more than one destinations. If destinations not
            specified for a given rule, default destionation will be BGP
        :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`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_INTER_VRF_STATIC`
            
            List of redistribution types
        """
        self.destinations = destinations
        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', {
        'destinations': type.OptionalType(type.ListType(type.StringType())),
        '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 Tier0SecurityFeature(VapiStruct):
    """
    T0 Security feature entity with feature details

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


    """



    _canonical_to_pep_names = {
                            'enable': 'enable',
                            'feature': 'feature',
                            }

    def __init__(self,
                 enable=None,
                 feature=None,
                ):
        """
        :type  enable: :class:`bool` or ``None``
        :param enable: true - activate the feature, false - deactivate the feture
        :type  feature: :class:`str` or ``None``
        :param feature: Possible values are: 
            
            * :attr:`Tier0SecurityFeature.FEATURE_IDFW`
            
            Feature to be activated/deactivated. IDFW - Identity Firewall Use
            any one of this to enable/disabe it.
        """
        self.enable = enable
        self.feature = feature
        VapiStruct.__init__(self)


Tier0SecurityFeature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_security_feature', {
        'enable': type.OptionalType(type.BooleanType()),
        'feature': type.OptionalType(type.StringType()),
    },
    Tier0SecurityFeature,
    False,
    None))



class Tier0SecurityFeatures(VapiStruct):
    """
    T0 Security features entity with feature details

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'features': 'features',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 features=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  features: :class:`list` of :class:`Tier0SecurityFeature` or ``None``
        :param features: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.features = features
        VapiStruct.__init__(self)


Tier0SecurityFeatures._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_security_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'features': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier0SecurityFeature'))),
    },
    Tier0SecurityFeatures,
    False,
    None))



class Tier0StatefulServicesConfig(VapiStruct):
    """
    Tier0 stateful services config to define stateful

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


    """
    REDIRECTION_POLICY_NONE = "NONE"
    """


    """



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'redirection_policy': 'redirection_policy',
                            }

    def __init__(self,
                 enabled=None,
                 redirection_policy=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: This is used to enable or disable ACTIVE-ACTIVE stateful services.
        :type  redirection_policy: :class:`str` or ``None``
        :param redirection_policy: Possible values are: 
            
            * :attr:`Tier0StatefulServicesConfig.REDIRECTION_POLICY_IP_HASH`
            * :attr:`Tier0StatefulServicesConfig.REDIRECTION_POLICY_NONE`
            
            Redirection policy enum types for enaling stateful services
            IP_HASH: Hash Source IP or destination ip to redirect packet for
            load sharing and stateful services. NONE: Disable redirection. It
            requires user to define static traffic group per edge node and
            expects external router to forward return packet back to the same
            edge node.
        """
        self.enabled = enabled
        self.redirection_policy = redirection_policy
        VapiStruct.__init__(self)


Tier0StatefulServicesConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_stateful_services_config', {
        'enabled': type.OptionalType(type.BooleanType()),
        'redirection_policy': type.OptionalType(type.StringType()),
    },
    Tier0StatefulServicesConfig,
    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 = {
                            'evpn_l2_vni_config': 'evpn_l2_vni_config',
                            'evpn_transit_vni': 'evpn_transit_vni',
                            'route_distinguisher': 'route_distinguisher',
                            'route_targets': 'route_targets',
                            'tier0_path': 'tier0_path',
                            }

    def __init__(self,
                 evpn_l2_vni_config=None,
                 evpn_transit_vni=None,
                 route_distinguisher=None,
                 route_targets=None,
                 tier0_path=None,
                ):
        """
        :type  evpn_l2_vni_config: :class:`VrfEvpnL2VniConfig` or ``None``
        :param evpn_l2_vni_config: 
        :type  evpn_transit_vni: :class:`long` or ``None``
        :param evpn_transit_vni: L3 VNI associated with the VRF for overlay traffic of ethernet
            virtual private network (EVPN). It must be unique and available
            from the VNI pool defined for EVPN service. It is required for VRF
            to participate in the EVPN service in INLINE mode. 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.evpn_l2_vni_config = evpn_l2_vni_config
        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', {
        'evpn_l2_vni_config': type.OptionalType(type.ReferenceType(__name__, 'VrfEvpnL2VniConfig')),
        '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"
    """


    """
    HA_MODE_STANDBY = "ACTIVE_STANDBY"
    """


    """
    HA_MODE_ACTIVE = "ACTIVE_ACTIVE"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'arp_limit': 'arp_limit',
                            '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',
                            'ha_mode': 'ha_mode',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 arp_limit=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,
                 ha_mode=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_limit: :class:`long` or ``None``
        :param arp_limit: Maximum number of ARP entries per transport node. format: int32
        :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.

            .. deprecated:: unknown
        :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: 
        :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.

            .. deprecated:: unknown
        :type  ha_mode: :class:`str` or ``None``
        :param ha_mode: Possible values are: 
            
            * :attr:`Tier1.HA_MODE_STANDBY`
            * :attr:`Tier1.HA_MODE_ACTIVE`
            
            Specify high-availability mode for Tier-1.
        :type  intersite_config: :class:`IntersiteGatewayConfig` or ``None``
        :param intersite_config: 
        :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: 
        :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: The reference to the Tier-0 instance using the policy path of the
            Tier-0 or label of type Provider. Specify the 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.arp_limit = arp_limit
        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.ha_mode = ha_mode
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_limit': type.OptionalType(type.IntegerType()),
        '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()),
        'ha_mode': type.OptionalType(type.StringType()),
        '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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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',
                            'transport_zone': 'transport_zone',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 ipv6_status=None,
                 tier1_state=None,
                 tier1_status=None,
                 transport_zone=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: 
        :type  tier1_status: :class:`LogicalRouterStatus` or ``None``
        :param tier1_status: 
        :type  transport_zone: :class:`PolicyTransportZone` or ``None``
        :param transport_zone: 
        """
        self.enforcement_point_path = enforcement_point_path
        self.ipv6_status = ipv6_status
        self.tier1_state = tier1_state
        self.tier1_status = tier1_status
        self.transport_zone = transport_zone
        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')),
        'transport_zone': type.OptionalType(type.ReferenceType(__name__, 'PolicyTransportZone')),
    },
    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.
    """
    ADMIN_STATE_UP = "UP"
    """


    """
    ADMIN_STATE_DOWN = "DOWN"
    """


    """
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dhcp_relay_path': 'dhcp_relay_path',
                            'subnets': 'subnets',
                            'admin_state': 'admin_state',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dhcp_relay_path=None,
                 subnets=None,
                 admin_state=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  dhcp_relay_path: :class:`str` or ``None``
        :param dhcp_relay_path: Policy path of dhcp-relay-config to be attached to this Interface.
        :type  subnets: :class:`list` of :class:`InterfaceSubnet` or ``None``
        :param subnets: Specify IP address and network prefix for interface.
        :type  admin_state: :class:`str` or ``None``
        :param admin_state: Possible values are: 
            
            * :attr:`Tier1Interface.ADMIN_STATE_UP`
            * :attr:`Tier1Interface.ADMIN_STATE_DOWN`
            
            This flag is used to enable/disable admin state on tier-1 service
            port. If admin_state flag value is not specified then default is
            UP. When set to UP then traffic on service port will be enabled and
            service port is enabled from routing perspective. When set to DOWN
            then traffic on service port will be disabled and service port is
            down from routing perspective. This flag is experimental because it
            will be used in V2T BYOT migration.
        :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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dhcp_relay_path = dhcp_relay_path
        self.subnets = subnets
        self.admin_state = admin_state
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'dhcp_relay_path': type.OptionalType(type.StringType()),
        'subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
        'admin_state': type.OptionalType(type.StringType()),
        '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 Tier1InterfaceGroup(VapiStruct):
    """
    Tier1 Interface group for interface grouping.

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


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'members': 'members',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 members=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`GatewayInterfaceReference` or ``None``
        :param members: List of interface reference. Interface must belong to same
            location.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`Tier1InterfaceGroup.TYPE_SERVICE`
            
            Interface group type. It is readonly. Always type 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.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.members = members
        self.type = type
        VapiStruct.__init__(self)


Tier1InterfaceGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1_interface_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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.ReferenceType(__name__, 'GatewayInterfaceReference'))),
        'type': type.OptionalType(type.StringType()),
    },
    Tier1InterfaceGroup,
    False,
    None))



class Tier1InterfaceGroupListResult(VapiStruct):
    """
    Paged collection of Tier-1 Interface 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_: 
        :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:`Tier1InterfaceGroup` or ``None``
        :param results: Tier-1 Interface 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)


Tier1InterfaceGroupListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1_interface_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__, 'Tier1InterfaceGroup'))),
    },
    Tier1InterfaceGroupListResult,
    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_: 
        :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_: 
        :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 TimeRangeDropdownFilterWidgetConfiguration(VapiStruct):
    """
    Represents configuration for dropdown filter widget for Time Range.

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



    _canonical_to_pep_names = {
                            'time_range_filter_info': 'time_range_filter_info',
                            'default_value': 'default_value',
                            'dropdown_filter_plot_config': 'dropdown_filter_plot_config',
                            '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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 time_range_filter_info=None,
                 default_value=None,
                 dropdown_filter_plot_config=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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  time_range_filter_info: :class:`TimeRangeFilterInfo` or ``None``
        :param time_range_filter_info: 
        :type  default_value: :class:`str` or ``None``
        :param default_value: Expression to specify default value of filter.
        :type  dropdown_filter_plot_config: :class:`DropdownFilterPlotConfiguration` or ``None``
        :param dropdown_filter_plot_config: 
        :type  dropdown_item: :class:`DropdownItem` or ``None``
        :param dropdown_item: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        self.time_range_filter_info = time_range_filter_info
        self.default_value = default_value
        self.dropdown_filter_plot_config = dropdown_filter_plot_config
        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.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

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

TimeRangeDropdownFilterWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.time_range_dropdown_filter_widget_configuration', {
        'time_range_filter_info': type.OptionalType(type.ReferenceType(__name__, 'TimeRangeFilterInfo')),
        'default_value': type.OptionalType(type.StringType()),
        'dropdown_filter_plot_config': type.OptionalType(type.ReferenceType(__name__, 'DropdownFilterPlotConfiguration')),
        '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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    TimeRangeDropdownFilterWidgetConfiguration,
    False,
    None))



class TimeRangeFilterInfo(VapiStruct):
    """
    time range filter information

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


    """



    _canonical_to_pep_names = {
                            'from_param_name': 'from_param_name',
                            'to_param_name': 'to_param_name',
                            'value_type': 'value_type',
                            }

    def __init__(self,
                 from_param_name=None,
                 to_param_name=None,
                 value_type=None,
                ):
        """
        :type  from_param_name: :class:`str` or ``None``
        :param from_param_name: from parameter name used for time range filter from date value.
        :type  to_param_name: :class:`str` or ``None``
        :param to_param_name: to parameter name used for time range filter to date value.
        :type  value_type: :class:`str` or ``None``
        :param value_type: Possible values are: 
            
            * :attr:`TimeRangeFilterInfo.VALUE_TYPE_EPOCH`
            
            type of time range filter value can be epoch, ISO date Format.
        """
        self.from_param_name = from_param_name
        self.to_param_name = to_param_name
        self.value_type = value_type
        VapiStruct.__init__(self)


TimeRangeFilterInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.time_range_filter_info', {
        'from_param_name': type.OptionalType(type.StringType()),
        'to_param_name': type.OptionalType(type.StringType()),
        'value_type': type.OptionalType(type.StringType()),
    },
    TimeRangeFilterInfo,
    False,
    None))



class TlsCertificate(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PURPOSE_CA = "signing-ca"
    """


    """
    TLS_CERTIFICATE_TYPE_CA = "CERTIFICATE_CA"
    """


    """
    TLS_CERTIFICATE_TYPE_SIGNED = "CERTIFICATE_SIGNED"
    """


    """
    TLS_CERTIFICATE_TYPE_SELF_SIGNED = "CERTIFICATE_SELF_SIGNED"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'details': 'details',
                            'has_private_key': 'has_private_key',
                            'pem_encoded': 'pem_encoded',
                            'purpose': 'purpose',
                            'tls_certificate_type': 'tls_certificate_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 details=None,
                 has_private_key=None,
                 pem_encoded=None,
                 purpose=None,
                 tls_certificate_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  has_private_key: :class:`bool` or ``None``
        :param has_private_key: whether we have the private key for this 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  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: pem encoded certificate data.
        :type  purpose: :class:`str` or ``None``
        :param purpose: Possible values are: 
            
            * :attr:`TlsCertificate.PURPOSE_CA`
            
            Purpose of this certificate. Can be empty or set to \"signing-ca\".
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tls_certificate_type: :class:`str` or ``None``
        :param tls_certificate_type: Possible values are: 
            
            * :attr:`TlsCertificate.TLS_CERTIFICATE_TYPE_CA`
            * :attr:`TlsCertificate.TLS_CERTIFICATE_TYPE_SIGNED`
            * :attr:`TlsCertificate.TLS_CERTIFICATE_TYPE_SELF_SIGNED`
            
            Classification of the TlsCertificate helps differentiate how a
            TlsCertificate could be used for various components either as a
            client trust certificate; CERTIFICATE_CA, or as a server identity
            certificate; CERTIFICATE_SIGNED,or CERTIFICATE_SELF_SIGNED.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.details = details
        self.has_private_key = has_private_key
        self.pem_encoded = pem_encoded
        self.purpose = purpose
        self.tls_certificate_type = tls_certificate_type
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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'))),
        'has_private_key': type.OptionalType(type.BooleanType()),
        'pem_encoded': type.OptionalType(type.StringType()),
        'purpose': type.OptionalType(type.StringType()),
        'tls_certificate_type': 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_: 
        :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.
    """
    CRL_TYPE_ONECRL = "OneCRL"
    """


    """
    CRL_TYPE_X509 = "X509"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'crl_type': 'crl_type',
                            'details': 'details',
                            'details_revoked_by_issuer_and_serial_number': 'details_revoked_by_issuer_and_serial_number',
                            'details_revoked_by_subject_and_public_key_hash': 'details_revoked_by_subject_and_public_key_hash',
                            'one_crl': 'one_crl',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 crl_type=None,
                 details=None,
                 details_revoked_by_issuer_and_serial_number=None,
                 details_revoked_by_subject_and_public_key_hash=None,
                 one_crl=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  crl_type: :class:`str` or ``None``
        :param crl_type: Possible values are: 
            
            * :attr:`TlsCrl.CRL_TYPE_ONECRL`
            * :attr:`TlsCrl.CRL_TYPE_X509`
            
            The type of the CRL. It can be \"OneCRL\" or \"X509\" (default).
        :type  details: :class:`X509Crl` or ``None``
        :param details: 
        :type  details_revoked_by_issuer_and_serial_number: :class:`list` of :class:`IssuerSerialNumber` or ``None``
        :param details_revoked_by_issuer_and_serial_number: Certificates revoked by issuer and 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  details_revoked_by_subject_and_public_key_hash: :class:`list` of :class:`SubjectPublicKeyHash` or ``None``
        :param details_revoked_by_subject_and_public_key_hash: Certificates revoked by subject and public key hash
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  one_crl: :class:`str` or ``None``
        :param one_crl: JSON-encoded OneCRL-like 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.crl_type = crl_type
        self.details = details
        self.details_revoked_by_issuer_and_serial_number = details_revoked_by_issuer_and_serial_number
        self.details_revoked_by_subject_and_public_key_hash = details_revoked_by_subject_and_public_key_hash
        self.one_crl = one_crl
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'crl_type': type.OptionalType(type.StringType()),
        'details': type.OptionalType(type.ReferenceType(__name__, 'X509Crl')),
        'details_revoked_by_issuer_and_serial_number': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IssuerSerialNumber'))),
        'details_revoked_by_subject_and_public_key_hash': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SubjectPublicKeyHash'))),
        'one_crl': type.OptionalType(type.StringType()),
        '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_: 
        :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 TlsCsr(VapiStruct):
    """


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


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'algorithm': 'algorithm',
                            'is_ca': 'is_ca',
                            'key_size': 'key_size',
                            'pem_encoded': 'pem_encoded',
                            'subject': 'subject',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 algorithm=None,
                 is_ca=None,
                 key_size=None,
                 pem_encoded=None,
                 subject=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`TlsCsr.ALGORITHM_RSA`
            
            Cryptographic algorithm (asymmetric) used by the public key for
            data encryption.
        :type  is_ca: :class:`bool` or ``None``
        :param is_ca: Whether the CSR is for a CA certificate.
        :type  key_size: :class:`long` or ``None``
        :param key_size: Size measured in bits of the public key used in a cryptographic
            algorithm. format: int64
        :type  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: PEM encoded certificate data.
            This 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:`Principal` or ``None``
        :param subject: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.algorithm = algorithm
        self.is_ca = is_ca
        self.key_size = key_size
        self.pem_encoded = pem_encoded
        self.subject = subject
        VapiStruct.__init__(self)


TlsCsr._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_csr', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'is_ca': type.OptionalType(type.BooleanType()),
        'key_size': type.OptionalType(type.IntegerType()),
        'pem_encoded': type.OptionalType(type.StringType()),
        'subject': type.OptionalType(type.ReferenceType(__name__, 'Principal')),
    },
    TlsCsr,
    False,
    None))



class TlsCsrListResult(VapiStruct):
    """
    Paged Collection of TlsCsr

    .. 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_: 
        :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:`TlsCsr` or ``None``
        :param results: TlsCsr 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)


TlsCsrListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_csr_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__, 'TlsCsr'))),
    },
    TlsCsrListResult,
    False,
    None))



class TlsCsrWithDaysValid(VapiStruct):
    """
    CSR data with days valid

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


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'algorithm': 'algorithm',
                            'is_ca': 'is_ca',
                            'key_size': 'key_size',
                            'pem_encoded': 'pem_encoded',
                            'subject': 'subject',
                            'days_valid': 'days_valid',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 algorithm=None,
                 is_ca=None,
                 key_size=None,
                 pem_encoded=None,
                 subject=None,
                 days_valid=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`TlsCsrWithDaysValid.ALGORITHM_RSA`
            
            Cryptographic algorithm (asymmetric) used by the public key for
            data encryption.
        :type  is_ca: :class:`bool` or ``None``
        :param is_ca: Whether the CSR is for a CA certificate.
        :type  key_size: :class:`long` or ``None``
        :param key_size: Size measured in bits of the public key used in a cryptographic
            algorithm. format: int64
        :type  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: PEM encoded certificate data.
            This 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:`Principal` or ``None``
        :param subject: 
        :type  days_valid: :class:`long` or ``None``
        :param days_valid: Number of days the certificate will be valid, default 825 days
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.algorithm = algorithm
        self.is_ca = is_ca
        self.key_size = key_size
        self.pem_encoded = pem_encoded
        self.subject = subject
        self.days_valid = days_valid
        VapiStruct.__init__(self)


TlsCsrWithDaysValid._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_csr_with_days_valid', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'is_ca': type.OptionalType(type.BooleanType()),
        'key_size': type.OptionalType(type.IntegerType()),
        'pem_encoded': type.OptionalType(type.StringType()),
        'subject': type.OptionalType(type.ReferenceType(__name__, 'Principal')),
        'days_valid': type.OptionalType(type.IntegerType()),
    },
    TlsCsrWithDaysValid,
    False,
    None))



class TlsInspectionExternalProfile(VapiStruct):
    """
    External inspection profile is used when the TLS connection is destined to
    a service not owned by the enterprise.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TlsInspectionExternalProfile"
    """
    Identifier denoting this class, when it is used 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_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_MAX_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    CLIENT_MAX_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    CLIENT_MAX_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    CLIENT_MIN_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    CLIENT_MIN_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    CLIENT_MIN_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    CRYPTO_ENFORCEMENT_ENFORCE = "ENFORCE"
    """


    """
    CRYPTO_ENFORCEMENT_TRANSPARENT = "TRANSPARENT"
    """


    """
    DECRYPTION_FAIL_ACTION_BLOCK = "BLOCK"
    """


    """
    DECRYPTION_FAIL_ACTION_BYPASS = "BYPASS"
    """


    """
    INVALID_CERT_ACTION_BLOCK = "BLOCK"
    """


    """
    INVALID_CERT_ACTION_ALLOW = "ALLOW"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    SERVER_MAX_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    SERVER_MAX_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    SERVER_MAX_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    SERVER_MIN_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    SERVER_MIN_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    SERVER_MIN_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    TLS_CONFIG_SETTING_BALANCED = "BALANCED"
    """


    """
    TLS_CONFIG_SETTING_HIGH_FIDELITY = "HIGH_FIDELITY"
    """


    """
    TLS_CONFIG_SETTING_HIGH_SECURITY = "HIGH_SECURITY"
    """


    """
    TLS_CONFIG_SETTING_CUSTOM = "CUSTOM"
    """


    """



    _canonical_to_pep_names = {
                            'client_cipher_suite': 'client_cipher_suite',
                            'client_max_tls_version': 'client_max_tls_version',
                            'client_min_tls_version': 'client_min_tls_version',
                            'crypto_enforcement': 'crypto_enforcement',
                            'decryption_fail_action': 'decryption_fail_action',
                            'invalid_cert_action': 'invalid_cert_action',
                            'ocsp_must_staple': 'ocsp_must_staple',
                            'proxy_trusted_ca_cert': 'proxy_trusted_ca_cert',
                            'proxy_untrusted_ca_cert': 'proxy_untrusted_ca_cert',
                            'server_cipher_suite': 'server_cipher_suite',
                            'server_max_tls_version': 'server_max_tls_version',
                            'server_min_tls_version': 'server_min_tls_version',
                            'tls_config_setting': 'tls_config_setting',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attention': 'attention',
                            'crls': 'crls',
                            'idle_connection_timeout': 'idle_connection_timeout',
                            'trusted_ca_bundles': 'trusted_ca_bundles',
                            }

    def __init__(self,
                 client_cipher_suite=None,
                 client_max_tls_version=None,
                 client_min_tls_version=None,
                 crypto_enforcement=None,
                 decryption_fail_action=None,
                 invalid_cert_action=None,
                 ocsp_must_staple=None,
                 proxy_trusted_ca_cert=None,
                 proxy_untrusted_ca_cert=None,
                 server_cipher_suite=None,
                 server_max_tls_version=None,
                 server_min_tls_version=None,
                 tls_config_setting=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='TlsInspectionExternalProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attention=None,
                 crls=None,
                 idle_connection_timeout=None,
                 trusted_ca_bundles=None,
                ):
        """
        :type  client_cipher_suite: :class:`list` of :class:`str` or ``None``
        :param client_cipher_suite: Possible values are: 
            
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionExternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA`
            
            Client's list of cipher suites. Required if CryptoEnforcement is
            ENFORCE. e.g. TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.
        :type  client_max_tls_version: :class:`str` or ``None``
        :param client_max_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.CLIENT_MAX_TLS_VERSION__2`
            * :attr:`TlsInspectionExternalProfile.CLIENT_MAX_TLS_VERSION__1`
            * :attr:`TlsInspectionExternalProfile.CLIENT_MAX_TLS_VERSION__0`
            
            Client's maximum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. Supported TLS versions are TLS1.1 and
            TLS1.2.
        :type  client_min_tls_version: :class:`str` or ``None``
        :param client_min_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.CLIENT_MIN_TLS_VERSION__2`
            * :attr:`TlsInspectionExternalProfile.CLIENT_MIN_TLS_VERSION__1`
            * :attr:`TlsInspectionExternalProfile.CLIENT_MIN_TLS_VERSION__0`
            
            Client's minimum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. Supported TLS versions are TLS1.1 and
            TLS1.2.
        :type  crypto_enforcement: :class:`str` or ``None``
        :param crypto_enforcement: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.CRYPTO_ENFORCEMENT_ENFORCE`
            *
              :attr:`TlsInspectionExternalProfile.CRYPTO_ENFORCEMENT_TRANSPARENT`
            
            If enforced and if TLS protocol Client/Server Hello has none of the
            permitted TLS versions or ciphers then the connection is
            immediately terminated.
        :type  decryption_fail_action: :class:`str` or ``None``
        :param decryption_fail_action: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.DECRYPTION_FAIL_ACTION_BLOCK`
            *
              :attr:`TlsInspectionExternalProfile.DECRYPTION_FAIL_ACTION_BYPASS`
            
            Action to take when TLS handshake fails.
        :type  invalid_cert_action: :class:`str` or ``None``
        :param invalid_cert_action: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.INVALID_CERT_ACTION_BLOCK`
            * :attr:`TlsInspectionExternalProfile.INVALID_CERT_ACTION_ALLOW`
            
            If presented invalid certificates take this action.
        :type  ocsp_must_staple: :class:`bool` or ``None``
        :param ocsp_must_staple: true - activate the ocsp must staple, false - deactivate it.
        :type  proxy_trusted_ca_cert: :class:`str` or ``None``
        :param proxy_trusted_ca_cert: Proxy trusted ca cert and key used to issue valid ca certificate.
            This is the subordinate CA cert (referred to as Proxy CA) by the
            Enterprise Issuing CA.
        :type  proxy_untrusted_ca_cert: :class:`str` or ``None``
        :param proxy_untrusted_ca_cert: Proxy untrusted ca cert and key used to issue invalid ca
            certificate
        :type  server_cipher_suite: :class:`list` of :class:`str` or ``None``
        :param server_cipher_suite: Possible values are: 
            
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionExternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA`
            
            Server's list of cipher suites. Required if CryptoEnforcement is
            ENFORCE. e.g. TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.
        :type  server_max_tls_version: :class:`str` or ``None``
        :param server_max_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.SERVER_MAX_TLS_VERSION__2`
            * :attr:`TlsInspectionExternalProfile.SERVER_MAX_TLS_VERSION__1`
            * :attr:`TlsInspectionExternalProfile.SERVER_MAX_TLS_VERSION__0`
            
            Server's maximum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. Supported versions are TLS1.1 and
            TLS1.2.
        :type  server_min_tls_version: :class:`str` or ``None``
        :param server_min_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.SERVER_MIN_TLS_VERSION__2`
            * :attr:`TlsInspectionExternalProfile.SERVER_MIN_TLS_VERSION__1`
            * :attr:`TlsInspectionExternalProfile.SERVER_MIN_TLS_VERSION__0`
            
            Server's minimum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. Supported versions are TLS1.1 and
            TLS1.2.
        :type  tls_config_setting: :class:`str` or ``None``
        :param tls_config_setting: Possible values are: 
            
            * :attr:`TlsInspectionExternalProfile.TLS_CONFIG_SETTING_BALANCED`
            *
              :attr:`TlsInspectionExternalProfile.TLS_CONFIG_SETTING_HIGH_FIDELITY`
            *
              :attr:`TlsInspectionExternalProfile.TLS_CONFIG_SETTING_HIGH_SECURITY`
            * :attr:`TlsInspectionExternalProfile.TLS_CONFIG_SETTING_CUSTOM`
            
            Pre-defined config settings. Settings could be one of Balanced,
            High Fidelity, High Security, Custom
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONBYPASSPROFILE`
            * :attr:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONEXTERNALPROFILE`
            * :attr:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONINTERNALPROFILE`
            
            Resource type to use as profile type
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  attention: :class:`str` or ``None``
        :param attention: Used to indicate an TLS version or Cipher version pre-defined
            settings mis-match.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  crls: :class:`list` of :class:`str` or ``None``
        :param crls: Bypass profile - CRL is required if the \"invalid_certificate\"
            action is allow. External profile - CRL is always required.
            Internal profile - CRL is required if \"certificate_validation\" is
            turned on.
        :type  idle_connection_timeout: :class:`long` or ``None``
        :param idle_connection_timeout: Timeout the connection when kept idle. Default is 90 minutes.
            format: int32
        :type  trusted_ca_bundles: :class:`list` of :class:`str` or ``None``
        :param trusted_ca_bundles: Bypass profile - CA bundle is required if the
            \"invalid_certificate\" action is allow. External profile - CA
            bundle is always required. Internal profile - CA bundle is required
            if \"certificate_validation\" is turned on.
        """
        self.client_cipher_suite = client_cipher_suite
        self.client_max_tls_version = client_max_tls_version
        self.client_min_tls_version = client_min_tls_version
        self.crypto_enforcement = crypto_enforcement
        self.decryption_fail_action = decryption_fail_action
        self.invalid_cert_action = invalid_cert_action
        self.ocsp_must_staple = ocsp_must_staple
        self.proxy_trusted_ca_cert = proxy_trusted_ca_cert
        self.proxy_untrusted_ca_cert = proxy_untrusted_ca_cert
        self.server_cipher_suite = server_cipher_suite
        self.server_max_tls_version = server_max_tls_version
        self.server_min_tls_version = server_min_tls_version
        self.tls_config_setting = tls_config_setting
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attention = attention
        self.crls = crls
        self.idle_connection_timeout = idle_connection_timeout
        self.trusted_ca_bundles = trusted_ca_bundles
        VapiStruct.__init__(self)

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

TlsInspectionExternalProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_inspection_external_profile', {
        'client_cipher_suite': type.OptionalType(type.ListType(type.StringType())),
        'client_max_tls_version': type.OptionalType(type.StringType()),
        'client_min_tls_version': type.OptionalType(type.StringType()),
        'crypto_enforcement': type.OptionalType(type.StringType()),
        'decryption_fail_action': type.OptionalType(type.StringType()),
        'invalid_cert_action': type.OptionalType(type.StringType()),
        'ocsp_must_staple': type.OptionalType(type.BooleanType()),
        'proxy_trusted_ca_cert': type.OptionalType(type.StringType()),
        'proxy_untrusted_ca_cert': type.OptionalType(type.StringType()),
        'server_cipher_suite': type.OptionalType(type.ListType(type.StringType())),
        'server_max_tls_version': type.OptionalType(type.StringType()),
        'server_min_tls_version': type.OptionalType(type.StringType()),
        'tls_config_setting': 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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'attention': type.OptionalType(type.StringType()),
        'crls': type.OptionalType(type.ListType(type.StringType())),
        'idle_connection_timeout': type.OptionalType(type.IntegerType()),
        'trusted_ca_bundles': type.OptionalType(type.ListType(type.StringType())),
    },
    TlsInspectionExternalProfile,
    False,
    None))



class TlsInspectionInternalProfile(VapiStruct):
    """
    Internal inspection Profile is used when the TLS connection is destined to
    a service not owned by the enterprise.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TlsInspectionInternalProfile"
    """
    Identifier denoting this class, when it is used 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_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_MAX_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    CLIENT_MAX_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    CLIENT_MAX_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    CLIENT_MIN_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    CLIENT_MIN_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    CLIENT_MIN_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    CRYPTO_ENFORCEMENT_ENFORCE = "ENFORCE"
    """


    """
    CRYPTO_ENFORCEMENT_TRANSPARENT = "TRANSPARENT"
    """


    """
    DECRYPTION_FAIL_ACTION_BLOCK = "BLOCK"
    """


    """
    DECRYPTION_FAIL_ACTION_BYPASS = "BYPASS"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    SERVER_MAX_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    SERVER_MAX_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    SERVER_MAX_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    SERVER_MIN_TLS_VERSION_2 = "TLS_V1_2"
    """


    """
    SERVER_MIN_TLS_VERSION_1 = "TLS_V1_1"
    """


    """
    SERVER_MIN_TLS_VERSION_0 = "TLS_V1_0"
    """


    """
    TLS_CONFIG_SETTING_BALANCED = "BALANCED"
    """


    """
    TLS_CONFIG_SETTING_HIGH_FIDELITY = "HIGH_FIDELITY"
    """


    """
    TLS_CONFIG_SETTING_HIGH_SECURITY = "HIGH_SECURITY"
    """


    """
    TLS_CONFIG_SETTING_CUSTOM = "CUSTOM"
    """


    """



    _canonical_to_pep_names = {
                            'certificate_validation': 'certificate_validation',
                            'client_cipher_suite': 'client_cipher_suite',
                            'client_max_tls_version': 'client_max_tls_version',
                            'client_min_tls_version': 'client_min_tls_version',
                            'crypto_enforcement': 'crypto_enforcement',
                            'decryption_fail_action': 'decryption_fail_action',
                            'default_cert_key': 'default_cert_key',
                            'ocsp_must_staple': 'ocsp_must_staple',
                            'server_certs_key': 'server_certs_key',
                            'server_cipher_suite': 'server_cipher_suite',
                            'server_max_tls_version': 'server_max_tls_version',
                            'server_min_tls_version': 'server_min_tls_version',
                            'tls_config_setting': 'tls_config_setting',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attention': 'attention',
                            'crls': 'crls',
                            'idle_connection_timeout': 'idle_connection_timeout',
                            'trusted_ca_bundles': 'trusted_ca_bundles',
                            }

    def __init__(self,
                 certificate_validation=None,
                 client_cipher_suite=None,
                 client_max_tls_version=None,
                 client_min_tls_version=None,
                 crypto_enforcement=None,
                 decryption_fail_action=None,
                 default_cert_key=None,
                 ocsp_must_staple=None,
                 server_certs_key=None,
                 server_cipher_suite=None,
                 server_max_tls_version=None,
                 server_min_tls_version=None,
                 tls_config_setting=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='TlsInspectionInternalProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attention=None,
                 crls=None,
                 idle_connection_timeout=None,
                 trusted_ca_bundles=None,
                ):
        """
        :type  certificate_validation: :class:`bool` or ``None``
        :param certificate_validation: true - activate the certificate validation; false - deactivate it.
        :type  client_cipher_suite: :class:`list` of :class:`str` or ``None``
        :param client_cipher_suite: Possible values are: 
            
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionInternalProfile.CLIENT_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA`
            
            Client's list of cipher suites. Required if CryptoEnforcement is
            ENFORCE. e.g. TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.
        :type  client_max_tls_version: :class:`str` or ``None``
        :param client_max_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionInternalProfile.CLIENT_MAX_TLS_VERSION__2`
            * :attr:`TlsInspectionInternalProfile.CLIENT_MAX_TLS_VERSION__1`
            * :attr:`TlsInspectionInternalProfile.CLIENT_MAX_TLS_VERSION__0`
            
            Client's maximum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. Supported versions are TLS1.1 and
            TLS1.2.
        :type  client_min_tls_version: :class:`str` or ``None``
        :param client_min_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionInternalProfile.CLIENT_MIN_TLS_VERSION__2`
            * :attr:`TlsInspectionInternalProfile.CLIENT_MIN_TLS_VERSION__1`
            * :attr:`TlsInspectionInternalProfile.CLIENT_MIN_TLS_VERSION__0`
            
            Client's minimum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. Supported versions are TLS1.1 and
            TLS1.2.
        :type  crypto_enforcement: :class:`str` or ``None``
        :param crypto_enforcement: Possible values are: 
            
            * :attr:`TlsInspectionInternalProfile.CRYPTO_ENFORCEMENT_ENFORCE`
            *
              :attr:`TlsInspectionInternalProfile.CRYPTO_ENFORCEMENT_TRANSPARENT`
            
            If enforced and if TLS protocol Client/Server Hello has none of the
            permitted TLS versions or ciphers then the connection is
            immediately terminated.
        :type  decryption_fail_action: :class:`str` or ``None``
        :param decryption_fail_action: Possible values are: 
            
            * :attr:`TlsInspectionInternalProfile.DECRYPTION_FAIL_ACTION_BLOCK`
            *
              :attr:`TlsInspectionInternalProfile.DECRYPTION_FAIL_ACTION_BYPASS`
            
            Action to take when TLS handshake fails.
        :type  default_cert_key: :class:`str` or ``None``
        :param default_cert_key: Default server certificate presented to the user.
        :type  ocsp_must_staple: :class:`bool` or ``None``
        :param ocsp_must_staple: true - activate the ocsp must staple, false - deactivate it.
        :type  server_certs_key: :class:`list` of :class:`str` or ``None``
        :param server_certs_key: Server certificate presented to the client.
        :type  server_cipher_suite: :class:`list` of :class:`str` or ``None``
        :param server_cipher_suite: Possible values are: 
            
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA256`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`TlsInspectionInternalProfile.SERVER_CIPHER_SUITE_RSA_WITH_AES_128_CBC_SHA`
            
            Server's list of cipher suites. Required if CryptoEnforcement is
            ENFORCE. e.g. TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.
        :type  server_max_tls_version: :class:`str` or ``None``
        :param server_max_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionInternalProfile.SERVER_MAX_TLS_VERSION__2`
            * :attr:`TlsInspectionInternalProfile.SERVER_MAX_TLS_VERSION__1`
            * :attr:`TlsInspectionInternalProfile.SERVER_MAX_TLS_VERSION__0`
            
            Server's maximum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. Supported versions are TLS1.0, TLS1.1
            and TLS1.2
        :type  server_min_tls_version: :class:`str` or ``None``
        :param server_min_tls_version: Possible values are: 
            
            * :attr:`TlsInspectionInternalProfile.SERVER_MIN_TLS_VERSION__2`
            * :attr:`TlsInspectionInternalProfile.SERVER_MIN_TLS_VERSION__1`
            * :attr:`TlsInspectionInternalProfile.SERVER_MIN_TLS_VERSION__0`
            
            Server's minimum TLS version to enforce. Required if
            CryptoEnforcement is ENFORCE. supported versions are TLS1.1 and
            TLS1.2.
        :type  tls_config_setting: :class:`str` or ``None``
        :param tls_config_setting: Possible values are: 
            
            * :attr:`TlsInspectionInternalProfile.TLS_CONFIG_SETTING_BALANCED`
            *
              :attr:`TlsInspectionInternalProfile.TLS_CONFIG_SETTING_HIGH_FIDELITY`
            *
              :attr:`TlsInspectionInternalProfile.TLS_CONFIG_SETTING_HIGH_SECURITY`
            * :attr:`TlsInspectionInternalProfile.TLS_CONFIG_SETTING_CUSTOM`
            
            Pre-defined config settings. Settings could be one of Balanced,
            High Fidelity, High Security, Custom
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONBYPASSPROFILE`
            * :attr:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONEXTERNALPROFILE`
            * :attr:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONINTERNALPROFILE`
            
            Resource type to use as profile type
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  attention: :class:`str` or ``None``
        :param attention: Used to indicate an TLS version or Cipher version pre-defined
            settings mis-match.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  crls: :class:`list` of :class:`str` or ``None``
        :param crls: Bypass profile - CRL is required if the \"invalid_certificate\"
            action is allow. External profile - CRL is always required.
            Internal profile - CRL is required if \"certificate_validation\" is
            turned on.
        :type  idle_connection_timeout: :class:`long` or ``None``
        :param idle_connection_timeout: Timeout the connection when kept idle. Default is 90 minutes.
            format: int32
        :type  trusted_ca_bundles: :class:`list` of :class:`str` or ``None``
        :param trusted_ca_bundles: Bypass profile - CA bundle is required if the
            \"invalid_certificate\" action is allow. External profile - CA
            bundle is always required. Internal profile - CA bundle is required
            if \"certificate_validation\" is turned on.
        """
        self.certificate_validation = certificate_validation
        self.client_cipher_suite = client_cipher_suite
        self.client_max_tls_version = client_max_tls_version
        self.client_min_tls_version = client_min_tls_version
        self.crypto_enforcement = crypto_enforcement
        self.decryption_fail_action = decryption_fail_action
        self.default_cert_key = default_cert_key
        self.ocsp_must_staple = ocsp_must_staple
        self.server_certs_key = server_certs_key
        self.server_cipher_suite = server_cipher_suite
        self.server_max_tls_version = server_max_tls_version
        self.server_min_tls_version = server_min_tls_version
        self.tls_config_setting = tls_config_setting
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attention = attention
        self.crls = crls
        self.idle_connection_timeout = idle_connection_timeout
        self.trusted_ca_bundles = trusted_ca_bundles
        VapiStruct.__init__(self)

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

TlsInspectionInternalProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_inspection_internal_profile', {
        'certificate_validation': type.OptionalType(type.BooleanType()),
        'client_cipher_suite': type.OptionalType(type.ListType(type.StringType())),
        'client_max_tls_version': type.OptionalType(type.StringType()),
        'client_min_tls_version': type.OptionalType(type.StringType()),
        'crypto_enforcement': type.OptionalType(type.StringType()),
        'decryption_fail_action': type.OptionalType(type.StringType()),
        'default_cert_key': type.OptionalType(type.StringType()),
        'ocsp_must_staple': type.OptionalType(type.BooleanType()),
        'server_certs_key': type.OptionalType(type.ListType(type.StringType())),
        'server_cipher_suite': type.OptionalType(type.ListType(type.StringType())),
        'server_max_tls_version': type.OptionalType(type.StringType()),
        'server_min_tls_version': type.OptionalType(type.StringType()),
        'tls_config_setting': 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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'attention': type.OptionalType(type.StringType()),
        'crls': type.OptionalType(type.ListType(type.StringType())),
        'idle_connection_timeout': type.OptionalType(type.IntegerType()),
        'trusted_ca_bundles': type.OptionalType(type.ListType(type.StringType())),
    },
    TlsInspectionInternalProfile,
    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: 
        :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 TlsPolicy(VapiStruct):
    """
    Contains ordered list of Rules for TLSPolicy

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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. The value of sequence
            number must be between 0 and 999,999. 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:`TlsRule` or ``None``
        :param rules: Rules that are a part of this TLSPolicy
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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)


TlsPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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__, 'TlsRule'))),
    },
    TlsPolicy,
    False,
    None))



class TlsPolicyListResult(VapiStruct):
    """
    Paged Collection of TLS inspection 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_: 
        :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:`TlsPolicy` or ``None``
        :param results: TLSPolicy 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)


TlsPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_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__, 'TlsPolicy'))),
    },
    TlsPolicyListResult,
    False,
    None))



class TlsProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TlsProfile"
    """
    Identifier denoting this class, when it is used 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_TLSINSPECTIONBYPASSPROFILE = "TlsInspectionBypassProfile"
    """


    """
    RESOURCE_TYPE_TLSINSPECTIONEXTERNALPROFILE = "TlsInspectionExternalProfile"
    """


    """
    RESOURCE_TYPE_TLSINSPECTIONINTERNALPROFILE = "TlsInspectionInternalProfile"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attention': 'attention',
                            'crls': 'crls',
                            'idle_connection_timeout': 'idle_connection_timeout',
                            'trusted_ca_bundles': 'trusted_ca_bundles',
                            }

    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='TlsProfile',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attention=None,
                 crls=None,
                 idle_connection_timeout=None,
                 trusted_ca_bundles=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONBYPASSPROFILE`
            * :attr:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONEXTERNALPROFILE`
            * :attr:`TlsProfile.RESOURCE_TYPE_TLSINSPECTIONINTERNALPROFILE`
            
            Resource type to use as profile type
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  attention: :class:`str` or ``None``
        :param attention: Used to indicate an TLS version or Cipher version pre-defined
            settings mis-match.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  crls: :class:`list` of :class:`str` or ``None``
        :param crls: Bypass profile - CRL is required if the \"invalid_certificate\"
            action is allow. External profile - CRL is always required.
            Internal profile - CRL is required if \"certificate_validation\" is
            turned on.
        :type  idle_connection_timeout: :class:`long` or ``None``
        :param idle_connection_timeout: Timeout the connection when kept idle. Default is 90 minutes.
            format: int32
        :type  trusted_ca_bundles: :class:`list` of :class:`str` or ``None``
        :param trusted_ca_bundles: Bypass profile - CA bundle is required if the
            \"invalid_certificate\" action is allow. External profile - CA
            bundle is always required. Internal profile - CA bundle is required
            if \"certificate_validation\" is turned on.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attention = attention
        self.crls = crls
        self.idle_connection_timeout = idle_connection_timeout
        self.trusted_ca_bundles = trusted_ca_bundles
        VapiStruct.__init__(self)

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

TlsProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'attention': type.OptionalType(type.StringType()),
        'crls': type.OptionalType(type.ListType(type.StringType())),
        'idle_connection_timeout': type.OptionalType(type.IntegerType()),
        'trusted_ca_bundles': type.OptionalType(type.ListType(type.StringType())),
    },
    TlsProfile,
    False,
    None))



class TlsProfileListResult(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_: 
        :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 TLS profiles.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`TlsProfile`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`TlsProfile`.
            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)


TlsProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_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__, 'TlsProfile')]))),
    },
    TlsProfileListResult,
    False,
    None))



class TlsRule(VapiStruct):
    """
    A rule indicates the decryption actions 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'tls_profile': 'tls_profile',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 tls_profile=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`TlsRule.DIRECTION_IN`
            * :attr:`TlsRule.DIRECTION_OUT`
            * :attr:`TlsRule.DIRECTION_IN_OUT`
            
            Define direction of traffic.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to deactivate the rule. Default is activated.
        :type  ip_protocol: :class:`str` or ``None``
        :param ip_protocol: Possible values are: 
            
            * :attr:`TlsRule.IP_PROTOCOL_IPV4`
            * :attr:`TlsRule.IP_PROTOCOL_IPV6`
            * :attr:`TlsRule.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 deactivated.
        :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. Instead of Layer 7 service profiles you can use a L7
            access profile. One of either Layer 7 service profiles or L7 Access
            Profile can be used in firewall rule. In case of L7 access profile
            only one is allowed.
        :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. Even
            though there is no limitation on length of a tag, internally tag
            will get truncated after 32 characters.
        :type  tls_profile: :class:`str` or ``None``
        :param tls_profile: TLS profile 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.tls_profile = tls_profile
        VapiStruct.__init__(self)


TlsRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'tls_profile': type.OptionalType(type.StringType()),
    },
    TlsRule,
    False,
    None))



class TlsRuleListResult(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_: 
        :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:`TlsRule` or ``None``
        :param results: TLS 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)


TlsRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_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__, 'TlsRule'))),
    },
    TlsRuleListResult,
    False,
    None))



class TlsStateObject(VapiStruct):
    """
    TLS state

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


    """
    INSPECTION_ACTION_BYPASS = "BYPASS"
    """


    """
    INSPECTION_ACTION_DROP = "DROP"
    """


    """
    INSPECTION_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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'failure_reasons': 'failure_reasons',
                            'fqdn': 'fqdn',
                            'inspection_action': 'inspection_action',
                            'scope': 'scope',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 failure_reasons=None,
                 fqdn=None,
                 inspection_action=None,
                 scope=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_reasons: :class:`list` of :class:`str` or ``None``
        :param failure_reasons: TLS inspection failure reasons.
        :type  fqdn: :class:`str` or ``None``
        :param fqdn: Fully Qualified Domain Name.
        :type  inspection_action: :class:`str` or ``None``
        :param inspection_action: Possible values are: 
            
            * :attr:`TlsStateObject.INSPECTION_ACTION_INVALID`
            * :attr:`TlsStateObject.INSPECTION_ACTION_BYPASS`
            * :attr:`TlsStateObject.INSPECTION_ACTION_DROP`
            * :attr:`TlsStateObject.INSPECTION_ACTION_REJECT`
            
            TLS inspection bypass action.
        :type  scope: :class:`str` or ``None``
        :param scope: Tier-0/Tier-1 Logical Router policy 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.failure_reasons = failure_reasons
        self.fqdn = fqdn
        self.inspection_action = inspection_action
        self.scope = scope
        VapiStruct.__init__(self)


TlsStateObject._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_state_object', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_reasons': type.OptionalType(type.ListType(type.StringType())),
        'fqdn': type.OptionalType(type.StringType()),
        'inspection_action': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.StringType()),
    },
    TlsStateObject,
    False,
    None))



class TlsStateObjectListResult(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_: 
        :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:`TlsStateObject` or ``None``
        :param results: TLS state 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)


TlsStateObjectListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_state_object_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__, 'TlsStateObject'))),
    },
    TlsStateObjectListResult,
    False,
    None))



class TlsTrustData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PURPOSE_CA = "signing-ca"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'purpose': 'purpose',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 key_algo=None,
                 passphrase=None,
                 pem_encoded=None,
                 private_key=None,
                 purpose=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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
        :type  purpose: :class:`str` or ``None``
        :param purpose: Possible values are: 
            
            * :attr:`TlsTrustData.PURPOSE_CA`
            
            Purpose of this certificate. Can be empty or set to \"signing-ca\".
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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
        self.purpose = purpose
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'purpose': type.OptionalType(type.StringType()),
    },
    TlsTrustData,
    False,
    None))



class TnHyperbusStatus(VapiStruct):
    """


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


    """
    HYPERBUS_STATUS_HEALTHY = "HEALTHY"
    """


    """
    HYPERBUS_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """
    HYPERBUS_STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'hyperbus_status': 'hyperbus_status',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 hyperbus_status=None,
                 transport_node_id=None,
                ):
        """
        :type  hyperbus_status: :class:`str` or ``None``
        :param hyperbus_status: Possible values are: 
            
            * :attr:`TnHyperbusStatus.HYPERBUS_STATUS_UNKNOWN`
            * :attr:`TnHyperbusStatus.HYPERBUS_STATUS_HEALTHY`
            * :attr:`TnHyperbusStatus.HYPERBUS_STATUS_UNHEALTHY`
            * :attr:`TnHyperbusStatus.HYPERBUS_STATUS_DEGRADED`
            
            Display the hyperbus status
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: Transport node id.
        """
        self.hyperbus_status = hyperbus_status
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


TnHyperbusStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tn_hyperbus_status', {
        'hyperbus_status': type.OptionalType(type.StringType()),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    TnHyperbusStatus,
    False,
    None))



class TnNodeAgentStatusListResult(VapiStruct):
    """
    Container agent status 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_: 
        :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:`TnNodeAgentstatus` or ``None``
        :param results: Container agent 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.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


TnNodeAgentStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tn_node_agent_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__, 'TnNodeAgentstatus'))),
    },
    TnNodeAgentStatusListResult,
    False,
    None))



class TnNodeAgentstatus(VapiStruct):
    """


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


    """
    HYPERBUS_CONNECTION_STATUS_HEALTHY = "HEALTHY"
    """


    """
    HYPERBUS_CONNECTION_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """
    HYPERBUS_CONNECTION_STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'hyperbus_connection_status': 'hyperbus_connection_status',
                            'vif_id': 'vif_id',
                            }

    def __init__(self,
                 hyperbus_connection_status=None,
                 vif_id=None,
                ):
        """
        :type  hyperbus_connection_status: :class:`str` or ``None``
        :param hyperbus_connection_status: Possible values are: 
            
            * :attr:`TnNodeAgentstatus.HYPERBUS_CONNECTION_STATUS_UNKNOWN`
            * :attr:`TnNodeAgentstatus.HYPERBUS_CONNECTION_STATUS_HEALTHY`
            * :attr:`TnNodeAgentstatus.HYPERBUS_CONNECTION_STATUS_UNHEALTHY`
            * :attr:`TnNodeAgentstatus.HYPERBUS_CONNECTION_STATUS_DEGRADED`
            
            Show the Node Agent connected VM vif status.
        :type  vif_id: :class:`str` or ``None``
        :param vif_id: Connected VM vif id.
        """
        self.hyperbus_connection_status = hyperbus_connection_status
        self.vif_id = vif_id
        VapiStruct.__init__(self)


TnNodeAgentstatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tn_node_agentstatus', {
        'hyperbus_connection_status': type.OptionalType(type.StringType()),
        'vif_id': type.OptionalType(type.StringType()),
    },
    TnNodeAgentstatus,
    False,
    None))



class TnNodeStackSpanStatus(VapiStruct):
    """
    List all the TNs spaned in L3PortMirrorSession mirror stack health status.

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


    """
    DEDICATED_STACK_STATUS_SUCCESS = "SUCCESS"
    """


    """
    DEDICATED_STACK_STATUS_FAILED = "FAILED"
    """


    """
    VMKNIC_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    VMKNIC_STATUS_SUCCESS = "SUCCESS"
    """


    """
    VMKNIC_STATUS_FAILED = "FAILED"
    """


    """



    _canonical_to_pep_names = {
                            'dedicated_stack_status': 'dedicated_stack_status',
                            'detail': 'detail',
                            'last_updated_time': 'last_updated_time',
                            'tn_node_id': 'tn_node_id',
                            'tn_node_name': 'tn_node_name',
                            'vmknic_status': 'vmknic_status',
                            }

    def __init__(self,
                 dedicated_stack_status=None,
                 detail=None,
                 last_updated_time=None,
                 tn_node_id=None,
                 tn_node_name=None,
                 vmknic_status=None,
                ):
        """
        :type  dedicated_stack_status: :class:`str` or ``None``
        :param dedicated_stack_status: Possible values are: 
            
            * :attr:`TnNodeStackSpanStatus.DEDICATED_STACK_STATUS_UNKNOWN`
            * :attr:`TnNodeStackSpanStatus.DEDICATED_STACK_STATUS_SUCCESS`
            * :attr:`TnNodeStackSpanStatus.DEDICATED_STACK_STATUS_FAILED`
            
            Show the dedicated mirror stack health status, if the TN node has
            the mirror stack, it will show SUCCESS or it will show FAILED.
        :type  detail: :class:`str` or ``None``
        :param detail: Give the detail info for mirror stack and vmknic health status. If
            the stack or vmknic is FAILED, detail info will tell user reason
            why the stauts is FAILED. So that user can correct their
            configuration.
        :type  last_updated_time: :class:`long` or ``None``
        :param last_updated_time: TN miror stack status will be updated periodically, this item
            indicates the lastest timestamp of TN node stack status is updated.
            format: int64
        :type  tn_node_id: :class:`str` or ``None``
        :param tn_node_id: For L3PortMirrorSession configured mirror stack, show the TN node
            UUID which spaned in L3PortMirrorSession.
        :type  tn_node_name: :class:`str` or ``None``
        :param tn_node_name: For L3PortMirrorSession configured mirror stack, show the TN node
            friendly name which spaned in L3PortMirrorSession.
        :type  vmknic_status: :class:`str` or ``None``
        :param vmknic_status: Possible values are: 
            
            * :attr:`TnNodeStackSpanStatus.VMKNIC_STATUS_UNKNOWN`
            * :attr:`TnNodeStackSpanStatus.VMKNIC_STATUS_SUCCESS`
            * :attr:`TnNodeStackSpanStatus.VMKNIC_STATUS_FAILED`
            
            Show the vmknic health status, if the vmknic has been bouned to
            mirror stack, it will show SUCCESS or it will show FAILED.
        """
        self.dedicated_stack_status = dedicated_stack_status
        self.detail = detail
        self.last_updated_time = last_updated_time
        self.tn_node_id = tn_node_id
        self.tn_node_name = tn_node_name
        self.vmknic_status = vmknic_status
        VapiStruct.__init__(self)


TnNodeStackSpanStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tn_node_stack_span_status', {
        'dedicated_stack_status': type.OptionalType(type.StringType()),
        'detail': type.OptionalType(type.StringType()),
        'last_updated_time': type.OptionalType(type.IntegerType()),
        'tn_node_id': type.OptionalType(type.StringType()),
        'tn_node_name': type.OptionalType(type.StringType()),
        'vmknic_status': type.OptionalType(type.StringType()),
    },
    TnNodeStackSpanStatus,
    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 TraceActionArgument(VapiStruct):
    """


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


    """
    TRACE_TYPE_BI_DIRECTIONAL = "BI_DIRECTIONAL"
    """


    """



    _canonical_to_pep_names = {
                            'dest_ipsec_vpn_config': 'dest_ipsec_vpn_config',
                            'dest_lport': 'dest_lport',
                            'reverse_filter': 'reverse_filter',
                            'trace_type': 'trace_type',
                            }

    def __init__(self,
                 dest_ipsec_vpn_config=None,
                 dest_lport=None,
                 reverse_filter=None,
                 trace_type=None,
                ):
        """
        :type  dest_ipsec_vpn_config: :class:`LiveTraceIpsecVpnConfig` or ``None``
        :param dest_ipsec_vpn_config: 
        :type  dest_lport: :class:`str` or ``None``
        :param dest_lport: It is required only when the type of trace is bidirectional. Please
            keep this field aligned with the destination logical port of count
            action and packet capture action config when the type of count
            action and packet capture action is bidirectional.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reverse_filter: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param reverse_filter: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LiveTraceFilterData`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LiveTraceFilterData`.
        :type  trace_type: :class:`str` or ``None``
        :param trace_type: Possible values are: 
            
            * :attr:`TraceActionArgument.TRACE_TYPE_UNI_DIRECTIONAL`
            * :attr:`TraceActionArgument.TRACE_TYPE_BI_DIRECTIONAL`
            
            Type of trace
            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.dest_ipsec_vpn_config = dest_ipsec_vpn_config
        self.dest_lport = dest_lport
        self.reverse_filter = reverse_filter
        self.trace_type = trace_type
        VapiStruct.__init__(self)


TraceActionArgument._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.trace_action_argument', {
        'dest_ipsec_vpn_config': type.OptionalType(type.ReferenceType(__name__, 'LiveTraceIpsecVpnConfig')),
        'dest_lport': type.OptionalType(type.StringType()),
        'reverse_filter': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LiveTraceFilterData')])),
        'trace_type': type.OptionalType(type.StringType()),
    },
    TraceActionArgument,
    False,
    None))



class TraceActionConfig(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'action_argument': 'action_argument',
                            'sampling_argument': 'sampling_argument',
                            }

    def __init__(self,
                 action_argument=None,
                 sampling_argument=None,
                ):
        """
        :type  action_argument: :class:`TraceActionArgument` or ``None``
        :param action_argument: 
        :type  sampling_argument: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param sampling_argument: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`SamplingArgument`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`SamplingArgument`.
        """
        self.action_argument = action_argument
        self.sampling_argument = sampling_argument
        VapiStruct.__init__(self)


TraceActionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.trace_action_config', {
        'action_argument': type.OptionalType(type.ReferenceType(__name__, 'TraceActionArgument')),
        'sampling_argument': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'SamplingArgument')])),
    },
    TraceActionConfig,
    False,
    None))



class TraceResult(VapiStruct):
    """


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


    """
    DIRECTION_BACKWARD = "BACKWARD"
    """


    """



    _canonical_to_pep_names = {
                            'analysis': 'analysis',
                            'counters': 'counters',
                            'direction': 'direction',
                            'logical_counters': 'logical_counters',
                            'observations': 'observations',
                            'packet_id': 'packet_id',
                            'result_overflowed': 'result_overflowed',
                            }

    def __init__(self,
                 analysis=None,
                 counters=None,
                 direction=None,
                 logical_counters=None,
                 observations=None,
                 packet_id=None,
                 result_overflowed=None,
                ):
        """
        :type  analysis: :class:`list` of :class:`str` or ``None``
        :param analysis: Trace action 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: 
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`TraceResult.DIRECTION_FORWARD`
            * :attr:`TraceResult.DIRECTION_BACKWARD`
            
            Direction of a trace
            This 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_counters: :class:`TraceflowObservationCounters` or ``None``
        :param logical_counters: 
        :type  observations: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param observations: Trace observation list
            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`.
            This 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_id: :class:`str` or ``None``
        :param packet_id: Packet ID in the 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  result_overflowed: :class:`bool` or ``None``
        :param result_overflowed: Whether 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.
        """
        self.analysis = analysis
        self.counters = counters
        self.direction = direction
        self.logical_counters = logical_counters
        self.observations = observations
        self.packet_id = packet_id
        self.result_overflowed = result_overflowed
        VapiStruct.__init__(self)


TraceResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.trace_result', {
        'analysis': type.OptionalType(type.ListType(type.StringType())),
        'counters': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationCounters')),
        'direction': type.OptionalType(type.StringType()),
        'logical_counters': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationCounters')),
        'observations': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'TraceflowObservation')]))),
        'packet_id': type.OptionalType(type.StringType()),
        'result_overflowed': type.OptionalType(type.BooleanType()),
    },
    TraceResult,
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :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: 
        :type  logical_counters: :class:`TraceflowObservationCounters` or ``None``
        :param logical_counters: 
        :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. Upper limit for federation case is 90000, for
            non-federation case is 15000, the maximum is set to 90000 as the
            higher of the two cases. format: int64
            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):
    """
    TraceflowConfig mainly records what type of packets the user wants to
    inject into which port. This configuration will be cleaned up by the system
    after two hours of inactivity if is_transient is true.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'source_id': 'source_id',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 is_transient=None,
                 packet=None,
                 segment_port_path=None,
                 source_id=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: 
            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: Policy path or UUID of segment port to start traceflow from.
            Auto-plumbed ports don't have corresponding policy path. Ports
            auto-created by policy as part of connecting segment to Tier-0 or
            Tier-1 or DHCP server cannot be used. UUID is validated for syntax
            only. This configuration will be cleaned up by the system after two
            hours of inactivity.

            .. deprecated:: unknown
        :type  source_id: :class:`str` or ``None``
        :param source_id: Policy path or UUID (validated for syntax only) of segment port to
            start traceflow from. Auto-plumbed ports don't have corresponding
            policy path. Both overlay backed port and VLAN backed port are
            supported.
        :type  timeout: :class:`long` or ``None``
        :param timeout: Maximum time in seconds the management plane will wait for
            observation result to be generated. The default, minimum and
            maximum timeout values, in seconds, for: Single site environment -
            minimum 5, default 10, maximum 15. Federated enviroment - minimum
            15, default 30, maximum 60. These values are validated by the
            system based on type of environment. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.source_id = source_id
        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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'source_id': 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_: 
        :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_LGW_ROUTE = "LGW_ROUTE"
    """


    """
    COMPONENT_SUB_TYPE_LR_KNI = "LR_KNI"
    """


    """
    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_EDGE_RTEP_TUNNEL = "EDGE_RTEP_TUNNEL"
    """


    """
    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_DLB = "DLB"
    """


    """
    COMPONENT_TYPE_ANTREA_SPOOFGUARD = "ANTREA_SPOOFGUARD"
    """


    """
    COMPONENT_TYPE_ANTREA_LB = "ANTREA_LB"
    """


    """
    COMPONENT_TYPE_ANTREA_ROUTING = "ANTREA_ROUTING"
    """


    """
    COMPONENT_TYPE_ANTREA_DFW = "ANTREA_DFW"
    """


    """
    COMPONENT_TYPE_ANTREA_FORWARDING = "ANTREA_FORWARDING"
    """


    """
    COMPONENT_TYPE_HOST_SWITCH = "HOST_SWITCH"
    """


    """
    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"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED = "TraceflowObservationProtected"
    """


    """
    TRANSPORT_NODE_TYPE_ESX = "ESX"
    """


    """
    TRANSPORT_NODE_TYPE_RHELKVM = "RHELKVM"
    """


    """
    TRANSPORT_NODE_TYPE_UBUNTUKVM = "UBUNTUKVM"
    """


    """
    TRANSPORT_NODE_TYPE_CENTOSKVM = "CENTOSKVM"
    """


    """
    TRANSPORT_NODE_TYPE_RHELCONTAINER = "RHELCONTAINER"
    """


    """
    TRANSPORT_NODE_TYPE_CENTOSCONTAINER = "CENTOSCONTAINER"
    """


    """
    TRANSPORT_NODE_TYPE_RHELSERVER = "RHELSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_UBUNTUSERVER = "UBUNTUSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_CENTOSSERVER = "CENTOSSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_SLESKVM = "SLESKVM"
    """


    """
    TRANSPORT_NODE_TYPE_SLESSERVER = "SLESSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_WINDOWSSERVER = "WINDOWSSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_RHELSMARTNIC = "RHELSMARTNIC"
    """


    """
    TRANSPORT_NODE_TYPE_OELSERVER = "OELSERVER"
    """


    """
    TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC = "UBUNTUSMARTNIC"
    """


    """
    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',
                            'site_path': 'site_path',
                            '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,
                 site_path=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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.site_path = site_path
        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()),
        'site_path': type.OptionalType(type.StringType()),
        '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',
                            'protected_count': 'protected_count',
                            'received_count': 'received_count',
                            }

    def __init__(self,
                 delivered_count=None,
                 dropped_count=None,
                 forwarded_count=None,
                 protected_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  protected_count: :class:`long` or ``None``
        :param protected_count: Total number of protected observations for this traceflow round,
            which current user does not have access. format: int64
            This 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.protected_count = protected_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()),
        'protected_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"
    """


    """
    RESOLUTION_TYPE_ARP_LRP = "ARP_LRP"
    """


    """



    _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',
                            'site_path': 'site_path',
                            '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,
                 site_path=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`
            * :attr:`TraceflowObservationDelivered.RESOLUTION_TYPE_ARP_LRP`
            
            This field specifies the resolution type of ARP
            ARP_SUPPRESSION_PORT_CACHE - ARP request is suppressed by IP table.
            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 by VM. ARP_LRP - No suppression and the ARP request is
            resolved by 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  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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.site_path = site_path
        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()),
        'site_path': type.OptionalType(type.StringType()),
        '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"
    """


    """
    IPSEC_FAIL_REASON_SA_NOT_FOUND = "IPSEC_SA_NOT_FOUND"
    """


    """
    IPSEC_FAIL_REASON_UDP_ENC_STATE_MISMATCH = "IPSEC_UDP_ENC_STATE_MISMATCH"
    """


    """
    IPSEC_FAIL_REASON_SEQ_ROLLOVER = "IPSEC_SEQ_ROLLOVER"
    """


    """
    IPSEC_FAIL_REASON_FRAG_NEEDED = "IPSEC_FRAG_NEEDED"
    """


    """
    IPSEC_FAIL_REASON_TUN_IFACE_DOWN = "IPSEC_TUN_IFACE_DOWN"
    """


    """
    IPSEC_FAIL_REASON_POLICY_NOMATCH = "IPSEC_POLICY_NOMATCH"
    """


    """
    IPSEC_FAIL_REASON_POLICY_BLOCK = "IPSEC_POLICY_BLOCK"
    """


    """
    IPSEC_FAIL_REASON_POLICY_ERROR = "IPSEC_POLICY_ERROR"
    """


    """
    IPSEC_FAIL_REASON_REPLAY_SEQ_NUM_REPEAT = "IPSEC_REPLAY_SEQ_NUM_REPEAT"
    """


    """
    IPSEC_FAIL_REASON_REPLAY_RECV_DELAY = "IPSEC_REPLAY_RECV_DELAY"
    """


    """
    IPSEC_FAIL_REASON_REPLAY_PROC_DELAY = "IPSEC_REPLAY_PROC_DELAY"
    """


    """
    IPSEC_FAIL_REASON_ZERO_SEQ_NUM_RECVD = "IPSEC_ZERO_SEQ_NUM_RECVD"
    """


    """
    IPSEC_FAIL_REASON_ENQUEUE_FAIL = "IPSEC_ENQUEUE_FAIL"
    """


    """
    IPSEC_FAIL_REASON_AUTH_DGST_MISMATCH = "IPSEC_AUTH_DGST_MISMATCH"
    """


    """
    IPSEC_FAIL_REASON_AUTH_DGST_SIZE_MISMATCH = "IPSEC_AUTH_DGST_SIZE_MISMATCH"
    """


    """
    IPSEC_FAIL_REASON_AUTH_UNSUPPORTED_ALGO = "IPSEC_AUTH_UNSUPPORTED_ALGO"
    """


    """
    IPSEC_FAIL_REASON_CRYPTO_FAIL = "IPSEC_CRYPTO_FAIL"
    """


    """
    IPSEC_FAIL_REASON_CRYPTO_PROC_INCOMPLETE = "IPSEC_CRYPTO_PROC_INCOMPLETE"
    """


    """
    IPSEC_FAIL_REASON_CRYPTO_SESSION_INV = "IPSEC_CRYPTO_SESSION_INV"
    """


    """
    IPSEC_FAIL_REASON_CRYPTO_ARGS_INV = "IPSEC_CRYPTO_ARGS_INV"
    """


    """
    IPSEC_FAIL_REASON_CRYPTO_PROC_ERROR = "IPSEC_CRYPTO_PROC_ERROR"
    """


    """
    IPSEC_FAIL_REASON_CRYPTO_NO_BUF_SPACE = "IPSEC_CRYPTO_NO_BUF_SPACE"
    """


    """
    IPSEC_FAIL_REASON_CRYPTO_UNSUPPORTED_CIPHER = "IPSEC_CRYPTO_UNSUPPORTED_CIPHER"
    """


    """
    IPSEC_FAIL_REASON_MALFORMED = "IPSEC_MALFORMED"
    """


    """
    IPSEC_FAIL_REASON_MALFORMED_INV_PADDING = "IPSEC_MALFORMED_INV_PADDING"
    """


    """
    IPSEC_FAIL_REASON_PADDING_REMOVAL_FAILED = "IPSEC_PADDING_REMOVAL_FAILED"
    """


    """
    IPSEC_FAIL_REASON_INNER_MALFORMED = "IPSEC_INNER_MALFORMED"
    """


    """
    IPSEC_FAIL_REASON_INNER_MALFORMED_IP = "IPSEC_INNER_MALFORMED_IP"
    """


    """
    IPSEC_FAIL_REASON_INNER_MALFORMED_UDP = "IPSEC_INNER_MALFORMED_UDP"
    """


    """
    IPSEC_FAIL_REASON_INNER_MALFORMED_TCP = "IPSEC_INNER_MALFORMED_TCP"
    """


    """
    IPSEC_FAIL_REASON_UNKNOWN = "IPSEC_UNKNOWN"
    """


    """
    REASON_ARP_FAIL = "ARP_FAIL"
    """


    """
    REASON_BFD = "BFD"
    """


    """
    REASON_BROADCAST = "BROADCAST"
    """


    """
    REASON_DHCP = "DHCP"
    """


    """
    REASON_DLB = "DLB"
    """


    """
    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_MANAGEMENT = "MANAGEMENT"
    """


    """
    REASON_MD_PROXY = "MD_PROXY"
    """


    """
    REASON_NAT = "NAT"
    """


    """
    REASON_RTEP_TUNNEL = "RTEP_TUNNEL"
    """


    """
    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_VLAN = "VLAN"
    """


    """
    REASON_VXLAN = "VXLAN"
    """


    """
    REASON_VXSTT = "VXSTT"
    """


    """
    REASON_VMC_NO_RESPONSE = "VMC_NO_RESPONSE"
    """


    """
    REASON_WRONG_UPLINK = "WRONG_UPLINK"
    """


    """
    REASON_FW_STATE = "FW_STATE"
    """


    """
    REASON_NO_MAC = "NO_MAC"
    """


    """
    REASON_UNKNOWN = "UNKNOWN"
    """


    """
    REASON_FILTERED_UPLINK = "FILTERED_UPLINK"
    """


    """



    _canonical_to_pep_names = {
                            'acl_rule_id': 'acl_rule_id',
                            'arp_fail_reason': 'arp_fail_reason',
                            'ipsec_fail_reason': 'ipsec_fail_reason',
                            'jumpto_rule_id': 'jumpto_rule_id',
                            'l2_rule_id': 'l2_rule_id',
                            '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',
                            'site_path': 'site_path',
                            '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,
                 ipsec_fail_reason=None,
                 jumpto_rule_id=None,
                 l2_rule_id=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,
                 site_path=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: This field is specified when the traceflow packet matched a L3
            firewall 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  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  ipsec_fail_reason: :class:`str` or ``None``
        :param ipsec_fail_reason: Possible values are: 
            
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SA_NOT_FOUND`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UDP_ENC_STATE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SEQ_ROLLOVER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_FRAG_NEEDED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_TUN_IFACE_DOWN`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_NOMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_BLOCK`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_SEQ_NUM_REPEAT`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_RECV_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_PROC_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ZERO_SEQ_NUM_RECVD`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ENQUEUE_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_SIZE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_UNSUPPORTED_ALGO`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_INCOMPLETE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_SESSION_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_ARGS_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_NO_BUF_SPACE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_UNSUPPORTED_CIPHER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED_INV_PADDING`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_PADDING_REMOVAL_FAILED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_IP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_UDP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_TCP`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UNKNOWN`
            
            This field specifies the IPSec VPN fails reason IPSEC_SA_NOT_FOUND
            - IPSec SA required for processing the packet does not exist
            IPSEC_UDP_ENC_STATE_MISMATCH - ESP packet is UDP encapsulated but
            IPsec SA does not expect UDP encapsulation IPSEC_SEQ_ROLLOVER -
            IPSec SA sequence number has exceeded the maximum value
            IPSEC_FRAG_NEEDED - Received packet has DF bit set in IP header but
            requires fragmentation due to ESP encapsulation
            IPSEC_TUN_IFACE_DOWN - IPSec tunnel interface is down
            IPSEC_POLICY_NOMATCH - Received packet does not match IPSec policy
            IPSEC_POLICY_BLOCK - IPSec packet processing failed
            IPSEC_POLICY_ERROR - IPSec packet processing failed
            IPSEC_REPLAY_SEQ_NUM_REPEAT - IPSec packet is dropped due to replay
            IPSEC_REPLAY_RECV_DELAY - IPSec packet is dropped due to replay
            IPSEC_REPLAY_PROC_DELAY - IPSec packet is dropped due to replay
            IPSEC_ZERO_SEQ_NUM_RECVD - ESP packet is received with sequence
            number as zero IPSEC_ENQUEUE_FAIL - Packet processing failed during
            crypto operation IPSEC_AUTH_DGST_MISMATCH - Packet integrity check
            failed due to digest mismatch IPSEC_AUTH_DGST_SIZE_MISMATCH -
            Packet integrity check failed due to invalid digest length
            IPSEC_AUTH_UNSUPPORTED_ALGO - Packet integrity check failed due to
            unsupported hash algorithm IPSEC_CRYPTO_FAIL - Packet processing
            failed during crypto operation IPSEC_CRYPTO_PROC_INCOMPLETE -
            Packet processing failed during crypto operation
            IPSEC_CRYPTO_SESSION_INV - Packet processing failed during crypto
            operation IPSEC_CRYPTO_ARGS_INV - Packet processing failed during
            crypto operation IPSEC_CRYPTO_PROC_ERROR - Packet processing failed
            during crypto operation IPSEC_CRYPTO_NO_BUF_SPACE - Packet
            processing failed during crypto operation
            IPSEC_CRYPTO_UNSUPPORTED_CIPHER - Packet processing failed during
            crypto operation IPSEC_MALFORMED - Received ESP packet is malformed
            IPSEC_MALFORMED_INV_PADDING - Received ESP packet is malformed
            IPSEC_PADDING_REMOVAL_FAILED - Received ESP packet is malformed
            IPSEC_INNER_MALFORMED - IP packet after ESP decryption is malformed
            IPSEC_INNER_MALFORMED_IP - IP packet after ESP decryption is
            malformed IPSEC_INNER_MALFORMED_UDP - IP packet after ESP
            decryption is malformed IPSEC_INNER_MALFORMED_TCP - IP packet after
            ESP decryption is malformed IPSEC_UNKNOWN - IPSec VPN failure
            reason is unknown
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  jumpto_rule_id: :class:`long` or ``None``
        :param jumpto_rule_id: This field is specified when the traceflow packet matched a jump-to
            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  l2_rule_id: :class:`long` or ``None``
        :param l2_rule_id: This field is specified when the traceflow packet matched a l2
            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  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: This field is specified when the traceflow packet matched a NAT
            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  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_BROADCAST`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_DLB`
            * :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_MANAGEMENT`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_RTEP_TUNNEL`
            * :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_VLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_FW_STATE`
            * :attr:`TraceflowObservationDropped.REASON_NO_MAC`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.REASON_FILTERED_UPLINK`
            
            This field specifies the drop reason of traceflow packet. ARP_FAIL
            - ARP request fails for some reasons, please refer arp_fail_reason
            for detail BFD - BFD packet is dropped because traversed by
            non-operative interface or encountering internal error (e.g.,
            memory insufficient) BROADCAST - Packet is dropped during
            traversing the interface (e.g., Edge uplink, Edge centralized
            service port) which disallow ethernet broadcast DHCP - DHCP packet
            is malformed DLB - The packet is disallowed by distributed load
            balancing FW_RULE - The packet matches a drop or reject rule of DFW
            or Edge firewall GENEVE - GENEVE packet is malformed GRE - GRE
            packet is malformed or traverses a non-operative interface IFACE -
            Packet traverses a non-operative interface IP - Packet is dropped
            because of IP related causes (e.g., ICMPv4/ICMPv6 packet is
            malformed, or DF flag is set but fragment must be performed for the
            packet) or corresponding interface is not found or inoperative
            IP_REASS - Packet is dropped during IP reassembly IPSEC - IPsec
            protocol related packet is dropped IPSEC_VTI - IPsec required SA is
            not found or traversing inoperative interface cause packet dropped
            L2VPN - VLAN id of GRE packet is invalid L4PORT - Layer 4 packet
            (e.g., BFD, DHCP) is dropped LB - Packet is dropped by load
            balancing rule LROUTER - Packet is dropped by logical router
            LSERVICE - Packet is malformed or traverses inoperative logical
            service interface LSWITCH - Packet is dropped by logical switch
            MANAGEMENT - Packet is dropped by Edge datapath MANAGEMENT service
            port MD_PROXY - Packet is dropped by metadata proxy NAT - Packet is
            dropped by NAT rule RTEP_TUNNEL - Unused drop reason ND_NS_FAIL -
            Neighbor Discovery packet fails NEIGH - ARP or Neighbor Discovery
            packet fails NO_EIP_FOUND - Destination IP is not an elastic IP
            NO_EIP_ASSOCIATION - Elastic IP is not associated with active edge
            VDR ENI NO_ENI_FOR_IP - There is no ENI found for the destination
            IP NO_ENI_FOR_LIF - Cannot find an ENI associated with uplink LIF
            NO_ROUTE - Cannot find route for destination IP
            NO_ROUTE_TABLE_FOUND - Cannot find associated route table
            NO_UNDERLAY_ROUTE_FOUND - Cannot find AWS route to destination
            NOT_VDR_DOWNLINK - Packet is not forwarded to VMC unmanaged VDR
            downlink NO_VDR_FOUND - VMC unmanaged VDR associated with Edge
            uplink is not found NO_VDR_ON_HOST - Cannot find VMC unmanaged VDR
            list on this host NOT_VDR_UPLINK - Packet is not forwarded to VDR
            uplink SERVICE_INSERT - Packet from guest VM to service VM or from
            service VM to guest VM is dropped by firewall rule SPOOFGUARD -
            Packet is blocked by SpoofGuard policy TTL_ZERO - The IPv4 time to
            live field or the IPv6 hop limit field of packet is zero TUNNEL -
            Overlay tunnel management packet (VNI value of GENEVE header is 0,
            e.g., BFD) is dropped VLAN - VLAN id of packet is disallowed by the
            given port VXLAN - VXLAN packet is malformed or cannot find tunnel
            port for it VXSTT - Unused drop reason VMC_NO_RESPONSE - Failed to
            query VMC observations as no response from VMC app WRONG_UPLINK -
            Packet is not routed to the expected Edge uplink by VMC unmanaged
            VDR FW_STATE - Packet is dropped by stateful firewall NO_MAC - Drop
            by vswitch as no destination MAC hit MAC Table. FILTERED_UPLINK -
            Filtering applied at the corresponding UPLINK having no
            aggregation.
            This 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.ipsec_fail_reason = ipsec_fail_reason
        self.jumpto_rule_id = jumpto_rule_id
        self.l2_rule_id = l2_rule_id
        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.site_path = site_path
        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()),
        'ipsec_fail_reason': type.OptionalType(type.StringType()),
        'jumpto_rule_id': type.OptionalType(type.IntegerType()),
        'l2_rule_id': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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',
                            'ipsec_fail_reason': 'ipsec_fail_reason',
                            'jumpto_rule_id': 'jumpto_rule_id',
                            'l2_rule_id': 'l2_rule_id',
                            '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',
                            'site_path': 'site_path',
                            '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,
                 ipsec_fail_reason=None,
                 jumpto_rule_id=None,
                 l2_rule_id=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,
                 site_path=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: This field is specified when the traceflow packet matched a L3
            firewall 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  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  ipsec_fail_reason: :class:`str` or ``None``
        :param ipsec_fail_reason: Possible values are: 
            
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SA_NOT_FOUND`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UDP_ENC_STATE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_SEQ_ROLLOVER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_FRAG_NEEDED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_TUN_IFACE_DOWN`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_NOMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_BLOCK`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_POLICY_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_SEQ_NUM_REPEAT`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_RECV_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_REPLAY_PROC_DELAY`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ZERO_SEQ_NUM_RECVD`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_ENQUEUE_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_DGST_SIZE_MISMATCH`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_AUTH_UNSUPPORTED_ALGO`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_FAIL`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_INCOMPLETE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_SESSION_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_ARGS_INV`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_PROC_ERROR`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_NO_BUF_SPACE`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_CRYPTO_UNSUPPORTED_CIPHER`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_MALFORMED_INV_PADDING`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_PADDING_REMOVAL_FAILED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_IP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_UDP`
            *
              :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_INNER_MALFORMED_TCP`
            * :attr:`TraceflowObservationDropped.IPSEC_FAIL_REASON_UNKNOWN`
            
            This field specifies the IPSec VPN fails reason IPSEC_SA_NOT_FOUND
            - IPSec SA required for processing the packet does not exist
            IPSEC_UDP_ENC_STATE_MISMATCH - ESP packet is UDP encapsulated but
            IPsec SA does not expect UDP encapsulation IPSEC_SEQ_ROLLOVER -
            IPSec SA sequence number has exceeded the maximum value
            IPSEC_FRAG_NEEDED - Received packet has DF bit set in IP header but
            requires fragmentation due to ESP encapsulation
            IPSEC_TUN_IFACE_DOWN - IPSec tunnel interface is down
            IPSEC_POLICY_NOMATCH - Received packet does not match IPSec policy
            IPSEC_POLICY_BLOCK - IPSec packet processing failed
            IPSEC_POLICY_ERROR - IPSec packet processing failed
            IPSEC_REPLAY_SEQ_NUM_REPEAT - IPSec packet is dropped due to replay
            IPSEC_REPLAY_RECV_DELAY - IPSec packet is dropped due to replay
            IPSEC_REPLAY_PROC_DELAY - IPSec packet is dropped due to replay
            IPSEC_ZERO_SEQ_NUM_RECVD - ESP packet is received with sequence
            number as zero IPSEC_ENQUEUE_FAIL - Packet processing failed during
            crypto operation IPSEC_AUTH_DGST_MISMATCH - Packet integrity check
            failed due to digest mismatch IPSEC_AUTH_DGST_SIZE_MISMATCH -
            Packet integrity check failed due to invalid digest length
            IPSEC_AUTH_UNSUPPORTED_ALGO - Packet integrity check failed due to
            unsupported hash algorithm IPSEC_CRYPTO_FAIL - Packet processing
            failed during crypto operation IPSEC_CRYPTO_PROC_INCOMPLETE -
            Packet processing failed during crypto operation
            IPSEC_CRYPTO_SESSION_INV - Packet processing failed during crypto
            operation IPSEC_CRYPTO_ARGS_INV - Packet processing failed during
            crypto operation IPSEC_CRYPTO_PROC_ERROR - Packet processing failed
            during crypto operation IPSEC_CRYPTO_NO_BUF_SPACE - Packet
            processing failed during crypto operation
            IPSEC_CRYPTO_UNSUPPORTED_CIPHER - Packet processing failed during
            crypto operation IPSEC_MALFORMED - Received ESP packet is malformed
            IPSEC_MALFORMED_INV_PADDING - Received ESP packet is malformed
            IPSEC_PADDING_REMOVAL_FAILED - Received ESP packet is malformed
            IPSEC_INNER_MALFORMED - IP packet after ESP decryption is malformed
            IPSEC_INNER_MALFORMED_IP - IP packet after ESP decryption is
            malformed IPSEC_INNER_MALFORMED_UDP - IP packet after ESP
            decryption is malformed IPSEC_INNER_MALFORMED_TCP - IP packet after
            ESP decryption is malformed IPSEC_UNKNOWN - IPSec VPN failure
            reason is unknown
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  jumpto_rule_id: :class:`long` or ``None``
        :param jumpto_rule_id: This field is specified when the traceflow packet matched a jump-to
            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  l2_rule_id: :class:`long` or ``None``
        :param l2_rule_id: This field is specified when the traceflow packet matched a l2
            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  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: This field is specified when the traceflow packet matched a NAT
            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  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_BROADCAST`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_DLB`
            * :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_MANAGEMENT`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_RTEP_TUNNEL`
            * :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_VLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_FW_STATE`
            * :attr:`TraceflowObservationDropped.REASON_NO_MAC`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.REASON_FILTERED_UPLINK`
            
            This field specifies the drop reason of traceflow packet. ARP_FAIL
            - ARP request fails for some reasons, please refer arp_fail_reason
            for detail BFD - BFD packet is dropped because traversed by
            non-operative interface or encountering internal error (e.g.,
            memory insufficient) BROADCAST - Packet is dropped during
            traversing the interface (e.g., Edge uplink, Edge centralized
            service port) which disallow ethernet broadcast DHCP - DHCP packet
            is malformed DLB - The packet is disallowed by distributed load
            balancing FW_RULE - The packet matches a drop or reject rule of DFW
            or Edge firewall GENEVE - GENEVE packet is malformed GRE - GRE
            packet is malformed or traverses a non-operative interface IFACE -
            Packet traverses a non-operative interface IP - Packet is dropped
            because of IP related causes (e.g., ICMPv4/ICMPv6 packet is
            malformed, or DF flag is set but fragment must be performed for the
            packet) or corresponding interface is not found or inoperative
            IP_REASS - Packet is dropped during IP reassembly IPSEC - IPsec
            protocol related packet is dropped IPSEC_VTI - IPsec required SA is
            not found or traversing inoperative interface cause packet dropped
            L2VPN - VLAN id of GRE packet is invalid L4PORT - Layer 4 packet
            (e.g., BFD, DHCP) is dropped LB - Packet is dropped by load
            balancing rule LROUTER - Packet is dropped by logical router
            LSERVICE - Packet is malformed or traverses inoperative logical
            service interface LSWITCH - Packet is dropped by logical switch
            MANAGEMENT - Packet is dropped by Edge datapath MANAGEMENT service
            port MD_PROXY - Packet is dropped by metadata proxy NAT - Packet is
            dropped by NAT rule RTEP_TUNNEL - Unused drop reason ND_NS_FAIL -
            Neighbor Discovery packet fails NEIGH - ARP or Neighbor Discovery
            packet fails NO_EIP_FOUND - Destination IP is not an elastic IP
            NO_EIP_ASSOCIATION - Elastic IP is not associated with active edge
            VDR ENI NO_ENI_FOR_IP - There is no ENI found for the destination
            IP NO_ENI_FOR_LIF - Cannot find an ENI associated with uplink LIF
            NO_ROUTE - Cannot find route for destination IP
            NO_ROUTE_TABLE_FOUND - Cannot find associated route table
            NO_UNDERLAY_ROUTE_FOUND - Cannot find AWS route to destination
            NOT_VDR_DOWNLINK - Packet is not forwarded to VMC unmanaged VDR
            downlink NO_VDR_FOUND - VMC unmanaged VDR associated with Edge
            uplink is not found NO_VDR_ON_HOST - Cannot find VMC unmanaged VDR
            list on this host NOT_VDR_UPLINK - Packet is not forwarded to VDR
            uplink SERVICE_INSERT - Packet from guest VM to service VM or from
            service VM to guest VM is dropped by firewall rule SPOOFGUARD -
            Packet is blocked by SpoofGuard policy TTL_ZERO - The IPv4 time to
            live field or the IPv6 hop limit field of packet is zero TUNNEL -
            Overlay tunnel management packet (VNI value of GENEVE header is 0,
            e.g., BFD) is dropped VLAN - VLAN id of packet is disallowed by the
            given port VXLAN - VXLAN packet is malformed or cannot find tunnel
            port for it VXSTT - Unused drop reason VMC_NO_RESPONSE - Failed to
            query VMC observations as no response from VMC app WRONG_UPLINK -
            Packet is not routed to the expected Edge uplink by VMC unmanaged
            VDR FW_STATE - Packet is dropped by stateful firewall NO_MAC - Drop
            by vswitch as no destination MAC hit MAC Table. FILTERED_UPLINK -
            Filtering applied at the corresponding UPLINK having no
            aggregation.
            This 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.ipsec_fail_reason = ipsec_fail_reason
        self.jumpto_rule_id = jumpto_rule_id
        self.l2_rule_id = l2_rule_id
        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.site_path = site_path
        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()),
        'ipsec_fail_reason': type.OptionalType(type.StringType()),
        'jumpto_rule_id': type.OptionalType(type.IntegerType()),
        'l2_rule_id': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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',
                            'site_path': 'site_path',
                            '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,
                 site_path=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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.site_path = site_path
        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()),
        'site_path': type.OptionalType(type.StringType()),
        '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_EDGE_RTEP_TUNNEL = "EDGE_RTEP_TUNNEL"
    """


    """
    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_DLB = "DLB"
    """


    """
    DST_COMPONENT_TYPE_ANTREA_SPOOFGUARD = "ANTREA_SPOOFGUARD"
    """


    """
    DST_COMPONENT_TYPE_ANTREA_LB = "ANTREA_LB"
    """


    """
    DST_COMPONENT_TYPE_ANTREA_ROUTING = "ANTREA_ROUTING"
    """


    """
    DST_COMPONENT_TYPE_ANTREA_DFW = "ANTREA_DFW"
    """


    """
    DST_COMPONENT_TYPE_ANTREA_FORWARDING = "ANTREA_FORWARDING"
    """


    """
    DST_COMPONENT_TYPE_HOST_SWITCH = "HOST_SWITCH"
    """


    """
    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',
                            'ipsec_vpn': 'ipsec_vpn',
                            'jumpto_rule_id': 'jumpto_rule_id',
                            'l2_rule_id': 'l2_rule_id',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'next_hop': 'next_hop',
                            'resend_type': 'resend_type',
                            'route_prefix': 'route_prefix',
                            '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',
                            'vlan': 'vlan',
                            'vni': 'vni',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'site_path': 'site_path',
                            '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,
                 ipsec_vpn=None,
                 jumpto_rule_id=None,
                 l2_rule_id=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 next_hop=None,
                 resend_type=None,
                 route_prefix=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,
                 vlan=None,
                 vni=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationForwardedLogical',
                 sequence_no=None,
                 site_path=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: This field is specified when the traceflow packet matched a L3
            firewall 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  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_EDGE_RTEP_TUNNEL`
            *
              :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_DLB`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_LB`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_ROUTING`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_DFW`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_ANTREA_FORWARDING`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_HOST_SWITCH`
            *
              :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  ipsec_vpn: :class:`TraceflowObservationIpsecVpn` or ``None``
        :param ipsec_vpn: 
        :type  jumpto_rule_id: :class:`long` or ``None``
        :param jumpto_rule_id: This field is specified when the traceflow packet matched a jump-to
            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  l2_rule_id: :class:`long` or ``None``
        :param l2_rule_id: This field is specified when the traceflow packet matched a l2
            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  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: This field is specified when the traceflow packet matched a NAT
            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  next_hop: :class:`str` or ``None``
        :param next_hop: This field is specified when the traceflow packet was routed by
            logical router. 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  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  route_prefix: :class:`str` or ``None``
        :param route_prefix: This field is specified when the traceflow packet was routed by
            logical router. 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  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  vlan: :class:`long` or ``None``
        :param vlan: This field is specified when the traceflow packet was forwarded by
            a VLAN logical network. format: int64
            This 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: This field is specified when the traceflow packet was forwarded by
            an overlay logical network. 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.ipsec_vpn = ipsec_vpn
        self.jumpto_rule_id = jumpto_rule_id
        self.l2_rule_id = l2_rule_id
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.next_hop = next_hop
        self.resend_type = resend_type
        self.route_prefix = route_prefix
        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.vlan = vlan
        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.site_path = site_path
        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()),
        'ipsec_vpn': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationIpsecVpn')),
        'jumpto_rule_id': type.OptionalType(type.IntegerType()),
        'l2_rule_id': type.OptionalType(type.IntegerType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'next_hop': type.OptionalType(type.StringType()),
        'resend_type': type.OptionalType(type.StringType()),
        'route_prefix': 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()),
        'vlan': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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 TraceflowObservationIpsecVpn(VapiStruct):
    """
    IPSec VPN traceflow observation.

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



    _canonical_to_pep_names = {
                            'inner_dst_ip': 'inner_dst_ip',
                            'inner_src_ip': 'inner_src_ip',
                            'local_ip': 'local_ip',
                            'policy_id': 'policy_id',
                            'remote_ip': 'remote_ip',
                            'session_id': 'session_id',
                            'spi': 'spi',
                            'vti_id': 'vti_id',
                            }

    def __init__(self,
                 inner_dst_ip=None,
                 inner_src_ip=None,
                 local_ip=None,
                 policy_id=None,
                 remote_ip=None,
                 session_id=None,
                 spi=None,
                 vti_id=None,
                ):
        """
        :type  inner_dst_ip: :class:`str` or ``None``
        :param inner_dst_ip: Inner destination 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  inner_src_ip: :class:`str` or ``None``
        :param inner_src_ip: Inner source 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  local_ip: :class:`str` or ``None``
        :param local_ip: Local VPN endpoint 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  policy_id: :class:`str` or ``None``
        :param policy_id: IPSec tunnel interface universally unique identifier in case of
            Policy-based IPSec VPN.
            This 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_ip: :class:`str` or ``None``
        :param remote_ip: Peer VPN endpoint 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  session_id: :class:`str` or ``None``
        :param session_id: IPSec VPN session universally unique 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  spi: :class:`long` or ``None``
        :param spi: Security Parameter Index is used to uniquely identify a particular
            IPSec 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  vti_id: :class:`str` or ``None``
        :param vti_id: Virtual tunnel interface universally unique identifier in case of
            Route-based IPSec VPN.
            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.inner_dst_ip = inner_dst_ip
        self.inner_src_ip = inner_src_ip
        self.local_ip = local_ip
        self.policy_id = policy_id
        self.remote_ip = remote_ip
        self.session_id = session_id
        self.spi = spi
        self.vti_id = vti_id
        VapiStruct.__init__(self)


TraceflowObservationIpsecVpn._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_ipsec_vpn', {
        'inner_dst_ip': type.OptionalType(type.StringType()),
        'inner_src_ip': type.OptionalType(type.StringType()),
        'local_ip': type.OptionalType(type.StringType()),
        'policy_id': type.OptionalType(type.StringType()),
        'remote_ip': type.OptionalType(type.StringType()),
        'session_id': type.OptionalType(type.StringType()),
        'spi': type.OptionalType(type.IntegerType()),
        'vti_id': type.OptionalType(type.StringType()),
    },
    TraceflowObservationIpsecVpn,
    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_: 
        :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 TraceflowObservationProtected(VapiStruct):
    """


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

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

    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONFORWARDED = "TraceflowObservationForwarded"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONDROPPED = "TraceflowObservationDropped"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONDELIVERED = "TraceflowObservationDelivered"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONRECEIVED = "TraceflowObservationReceived"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL = "TraceflowObservationForwardedLogical"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL = "TraceflowObservationDroppedLogical"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL = "TraceflowObservationReceivedLogical"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL = "TraceflowObservationReplicationLogical"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL = "TraceflowObservationRelayedLogical"
    """


    """
    ORIGINAL_TYPE_TRACEFLOWOBSERVATIONPROTECTED = "TraceflowObservationProtected"
    """


    """



    _canonical_to_pep_names = {
                            'original_type': 'original_type',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'site_path': 'site_path',
                            '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,
                 original_type=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationProtected',
                 sequence_no=None,
                 site_path=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  original_type: :class:`str` or ``None``
        :param original_type: Possible values are: 
            
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
            *
              :attr:`TraceflowObservationProtected.ORIGINAL_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
            
            Holding the type of observation before converted to protected type.
        :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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.original_type = original_type
        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.site_path = site_path
        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

TraceflowObservationProtected._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_protected', {
        'original_type': 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()),
        'site_path': type.OptionalType(type.StringType()),
        '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()),
    },
    TraceflowObservationProtected,
    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',
                            'site_path': 'site_path',
                            '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,
                 site_path=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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.site_path = site_path
        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()),
        'site_path': type.OptionalType(type.StringType()),
        '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_EDGE_RTEP_TUNNEL = "EDGE_RTEP_TUNNEL"
    """


    """
    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_DLB = "DLB"
    """


    """
    SRC_COMPONENT_TYPE_ANTREA_SPOOFGUARD = "ANTREA_SPOOFGUARD"
    """


    """
    SRC_COMPONENT_TYPE_ANTREA_LB = "ANTREA_LB"
    """


    """
    SRC_COMPONENT_TYPE_ANTREA_ROUTING = "ANTREA_ROUTING"
    """


    """
    SRC_COMPONENT_TYPE_ANTREA_DFW = "ANTREA_DFW"
    """


    """
    SRC_COMPONENT_TYPE_ANTREA_FORWARDING = "ANTREA_FORWARDING"
    """


    """
    SRC_COMPONENT_TYPE_HOST_SWITCH = "HOST_SWITCH"
    """


    """
    SRC_COMPONENT_TYPE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'component_id': 'component_id',
                            'ipsec_vpn': 'ipsec_vpn',
                            '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',
                            'vlan': 'vlan',
                            'vni': 'vni',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'site_path': 'site_path',
                            '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,
                 ipsec_vpn=None,
                 lport_id=None,
                 lport_name=None,
                 src_component_id=None,
                 src_component_name=None,
                 src_component_type=None,
                 svc_mac=None,
                 vlan=None,
                 vni=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationReceivedLogical',
                 sequence_no=None,
                 site_path=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  ipsec_vpn: :class:`TraceflowObservationIpsecVpn` or ``None``
        :param ipsec_vpn: 
        :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_EDGE_RTEP_TUNNEL`
            *
              :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_DLB`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_LB`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_ROUTING`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_DFW`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_ANTREA_FORWARDING`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_HOST_SWITCH`
            *
              :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  vlan: :class:`long` or ``None``
        :param vlan: This field is specified when the traceflow packet was received by a
            VLAN logical network. format: int64
            This 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: This field is specified when the traceflow packet was received by
            an overlay logical network. 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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.ipsec_vpn = ipsec_vpn
        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.vlan = vlan
        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.site_path = site_path
        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()),
        'ipsec_vpn': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationIpsecVpn')),
        '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()),
        'vlan': type.OptionalType(type.IntegerType()),
        '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()),
        'site_path': type.OptionalType(type.StringType()),
        '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',
                            'site_path': 'site_path',
                            '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,
                 site_path=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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.site_path = site_path
        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()),
        'site_path': type.OptionalType(type.StringType()),
        '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',
                            'site_path': 'site_path',
                            '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,
                 site_path=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_LGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_KNI`
            * :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_EDGE_RTEP_TUNNEL`
            * :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_DLB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_LB`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_ROUTING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_ANTREA_FORWARDING`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_HOST_SWITCH`
            * :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`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONPROTECTED`
        :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  site_path: :class:`str` or ``None``
        :param site_path: This field contains the site path where this observation was
            generated.
            This 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_CENTOSKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSCONTAINER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_CENTOSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_SLESSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_WINDOWSSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELSMARTNIC`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OELSERVER`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUSMARTNIC`
            * :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.site_path = site_path
        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()),
        'site_path': type.OptionalType(type.StringType()),
        '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 TraceflowRequestParameter(VapiStruct):
    """
    Traceflow request parameter, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowRequestParameter"
    """
    Identifier denoting this class, when it is used 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 = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 resource_type='TraceflowRequestParameter',
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy path of enforcement point on which traceflow session was
            created.
        :type  resource_type: :class:`str`
        :param resource_type: The type of this request parameter.
        """
        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

TraceflowRequestParameter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_request_parameter', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    TraceflowRequestParameter,
    False,
    None))



class TrafficRateLimits(VapiStruct):
    """
    Activates traffic limit for incoming/outgoing broadcast and multicast
    packets. Use 0 to deactivate 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 TransportInfo(VapiStruct):
    """


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


    """
    PROTOCOL_UDP = "UDP"
    """


    """
    PROTOCOL_ICMPV4 = "ICMPv4"
    """


    """
    PROTOCOL_ICMPV6 = "ICMPv6"
    """


    """
    PROTOCOL_ESP = "ESP"
    """


    """



    _canonical_to_pep_names = {
                            'dst_port': 'dst_port',
                            'protocol': 'protocol',
                            'spi': 'spi',
                            'src_port': 'src_port',
                            }

    def __init__(self,
                 dst_port=None,
                 protocol=None,
                 spi=None,
                 src_port=None,
                ):
        """
        :type  dst_port: :class:`long` or ``None``
        :param dst_port: Destination port format: int64
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`TransportInfo.PROTOCOL_TCP`
            * :attr:`TransportInfo.PROTOCOL_UDP`
            * :attr:`TransportInfo.PROTOCOL_ICMPV4`
            * :attr:`TransportInfo.PROTOCOL_ICMPV6`
            * :attr:`TransportInfo.PROTOCOL_ESP`
            
            Protocol type over IP layer
        :type  spi: :class:`long` or ``None``
        :param spi: Security Parameter Index is to uniquely identify a particular IPSec
            Security Association format: int64
        :type  src_port: :class:`long` or ``None``
        :param src_port: Source port format: int64
        """
        self.dst_port = dst_port
        self.protocol = protocol
        self.spi = spi
        self.src_port = src_port
        VapiStruct.__init__(self)


TransportInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_info', {
        'dst_port': type.OptionalType(type.IntegerType()),
        'protocol': type.OptionalType(type.StringType()),
        'spi': type.OptionalType(type.IntegerType()),
        'src_port': type.OptionalType(type.IntegerType()),
    },
    TransportInfo,
    False,
    None))



class TransportNodeCollectionState(VapiStruct):
    """
    Realization state of attaching or detaching Transport node profile on
    compute collection.

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


    """
    STATE_FAILED_TO_REALIZE = "FAILED_TO_REALIZE"
    """


    """
    STATE_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    STATE_PROFILE_MISMATCH = "PROFILE_MISMATCH"
    """


    """
    STATE_SUCCESS = "SUCCESS"
    """


    """



    _canonical_to_pep_names = {
                            'aggregate_progress_percentage': 'aggregate_progress_percentage',
                            'cluster_level_error': 'cluster_level_error',
                            'state': 'state',
                            'validation_errors': 'validation_errors',
                            'vlcm_transition_error': 'vlcm_transition_error',
                            }

    def __init__(self,
                 aggregate_progress_percentage=None,
                 cluster_level_error=None,
                 state=None,
                 validation_errors=None,
                 vlcm_transition_error=None,
                ):
        """
        :type  aggregate_progress_percentage: :class:`long` or ``None``
        :param aggregate_progress_percentage: Average of all transport node deployment progress in a cluster.
            Applicable only if transport node profile is applied on a cluster.
            format: int64
            This 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_level_error: :class:`str` or ``None``
        :param cluster_level_error: Errors while applying transport node profile which need cluster
            level action to resolve
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`TransportNodeCollectionState.STATE_FAILED_TO_CREATE`
            * :attr:`TransportNodeCollectionState.STATE_FAILED_TO_REALIZE`
            * :attr:`TransportNodeCollectionState.STATE_IN_PROGRESS`
            * :attr:`TransportNodeCollectionState.STATE_PROFILE_MISMATCH`
            * :attr:`TransportNodeCollectionState.STATE_SUCCESS`
            
            If the host preparation or transport node creation is going on for
            any host then state will be \"IN_PROGRESS\". If setting desired
            state of the transport node failed for any of the host then state
            will be \"FAILED_TO_CREATE\" If realization of transport node
            failed for any of the host then state will be \"FAILED_TO_REALIZE\"
            If Transport node is successfully created for all of the hosts in
            compute collection then state will be \"SUCCESS\" You can override
            the configuration for one or more hosts in the compute collection
            by update TN(transport node) request on individual TN. If TN is
            successfully created for all hosts in compute collection and one or
            more hosts have overridden configuration then transport node
            collection state will be \"PROFILE_MISMATCH\".
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  validation_errors: :class:`list` of :class:`ValidationError` or ``None``
        :param validation_errors: Transport node profile(TNP) will not be applied to a discovered
            node(DN) if some validations are not passed. In this case transport
            node is not created or existing transport node is not updated with
            TNP configurations.
        :type  vlcm_transition_error: :class:`str` or ``None``
        :param vlcm_transition_error: When vLCM is enabled on a compute collection in vSphere the
            transition workflow is triggered. This field indicates error in
            this special case.
            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_progress_percentage = aggregate_progress_percentage
        self.cluster_level_error = cluster_level_error
        self.state = state
        self.validation_errors = validation_errors
        self.vlcm_transition_error = vlcm_transition_error
        VapiStruct.__init__(self)


TransportNodeCollectionState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_collection_state', {
        'aggregate_progress_percentage': type.OptionalType(type.IntegerType()),
        'cluster_level_error': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'validation_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ValidationError'))),
        'vlcm_transition_error': type.OptionalType(type.StringType()),
    },
    TransportNodeCollectionState,
    False,
    None))



class TransportNodeDatapathStats(VapiStruct):
    """
    Datapath statistics in a transport node.

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



    _canonical_to_pep_names = {
                            'datapath_counter_results': 'datapath_counter_results',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            }

    def __init__(self,
                 datapath_counter_results=None,
                 transport_node_id=None,
                 transport_node_name=None,
                ):
        """
        :type  datapath_counter_results: :class:`list` of :class:`DatapathCounterResult` or ``None``
        :param datapath_counter_results: The datapath counter results in a 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  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  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: Transport node 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.datapath_counter_results = datapath_counter_results
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        VapiStruct.__init__(self)


TransportNodeDatapathStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_datapath_stats', {
        'datapath_counter_results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DatapathCounterResult'))),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
    },
    TransportNodeDatapathStats,
    False,
    None))



class TransportNodeDeploymentProgressState(VapiStruct):
    """
    Deployment progress state of transport node. Object has current deployment
    step title and progress in percentage.

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



    _canonical_to_pep_names = {
                            'current_step_title': 'current_step_title',
                            'progress': 'progress',
                            }

    def __init__(self,
                 current_step_title=None,
                 progress=None,
                ):
        """
        :type  current_step_title: :class:`str` or ``None``
        :param current_step_title: Deployment step title
            This 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: Percentage of deployment completed format: int64
            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_step_title = current_step_title
        self.progress = progress
        VapiStruct.__init__(self)


TransportNodeDeploymentProgressState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_deployment_progress_state', {
        'current_step_title': type.OptionalType(type.StringType()),
        'progress': type.OptionalType(type.IntegerType()),
    },
    TransportNodeDeploymentProgressState,
    False,
    None))



class TransportNodeProfileSubConfig(VapiStruct):
    """
    Transport Node Profile sub-configuration option specification

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



    _canonical_to_pep_names = {
                            'host_switch_config_option': 'host_switch_config_option',
                            'name': 'name',
                            }

    def __init__(self,
                 host_switch_config_option=None,
                 name=None,
                ):
        """
        :type  host_switch_config_option: :class:`HostSwitchConfigOption` or ``None``
        :param host_switch_config_option: 
        :type  name: :class:`str` or ``None``
        :param name: This field represents the name of the subset of the host switch
            configuration under a Transport Node Profile. This field is
            applicable only for a VDS based host switch and not for an NVDS
            based host switch. This name should be unique across a specific
            host switch.
        """
        self.host_switch_config_option = host_switch_config_option
        self.name = name
        VapiStruct.__init__(self)


TransportNodeProfileSubConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_profile_sub_config', {
        'host_switch_config_option': type.OptionalType(type.ReferenceType(__name__, 'HostSwitchConfigOption')),
        'name': type.OptionalType(type.StringType()),
    },
    TransportNodeProfileSubConfig,
    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 TransportNodeState(VapiStruct):
    """
    Transport Node State

    .. 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"
    """


    """
    STATE_REPLACE_FAILED = "REPLACE_FAILED"
    """


    """
    STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED = "UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED"
    """


    """
    STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING = "LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING"
    """


    """
    STATE_DELETE_VM_IN_REDEPLOY_FAILED = "DELETE_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_DEPLOY_VM_IN_REDEPLOY_FAILED = "DEPLOY_VM_IN_REDEPLOY_FAILED"
    """


    """
    STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE = "INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_FAILED = "VM_RESOURCE_RESERVATION_FAILED"
    """


    """
    STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER = "DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE = "EDGE_NODE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE = "EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE"
    """


    """
    STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE = "EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE"
    """


    """
    STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE = "EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE"
    """


    """
    STATE_COMPUTE_MANAGER_NOT_FOUND = "COMPUTE_MANAGER_NOT_FOUND"
    """


    """
    STATE_DELETE_IN_PROGRESS = "DELETE_IN_PROGRESS"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_FAILED = "ADVANCED_CONFIG_EDIT_FAILED"
    """


    """
    STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT = "UPT_MODE_REALIZATION_POLL_TIMED_OUT"
    """


    """
    STATE_DATAPATH_CONFIGURATION_EDIT_FAILED = "DATAPATH_CONFIGURATION_EDIT_FAILED"
    """


    """
    STATE_MAINTENANCE_MODE_ENABLED = "MAINTENANCE_MODE_ENABLED"
    """


    """
    STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE = "ERROR_IN_ENABLE_MAINTENANCE_MODE"
    """


    """
    STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE = "ERROR_IN_DISABLE_MAINTENANCE_MODE"
    """


    """
    STATE_CONFIGURE_UPT_ON_VM_FAILED = "CONFIGURE_UPT_ON_VM_FAILED"
    """


    """
    STATE_VM_VERSION_IS_UPT_INCOMPATIBLE = "VM_VERSION_IS_UPT_INCOMPATIBLE"
    """


    """
    STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID = "DELETE_FAILED_FOR_DIFFERENT_MOREF_ID"
    """


    """
    STATE_DELETE_FAILED_ON_VM_NOT_FOUND = "DELETE_FAILED_ON_VM_NOT_FOUND"
    """


    """
    STATE_DELETE_FAILED_FOR_NON_LCM_EDGE = "DELETE_FAILED_FOR_NON_LCM_EDGE"
    """


    """
    STATE_ADVANCED_CONFIG_EDIT_PENDING = "ADVANCED_CONFIG_EDIT_PENDING"
    """


    """
    STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC = "DUPLICATE_VLANS_SHARING_SAME_PNIC"
    """


    """
    STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING = "MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING"
    """


    """
    STATE_REDEPLOY_ACTIVITY_FAILED = "REDEPLOY_ACTIVITY_FAILED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_IN_PROGRESS = "REDEPLOY_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SCHEDULED = "REDEPLOY_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REDEPLOY_ACTIVITY_SUCCESSFUL = "REDEPLOY_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACE_ACTIVITY_FAILED = "REPLACE_ACTIVITY_FAILED"
    """


    """
    STATE_REPLACE_ACTIVITY_IN_PROGRESS = "REPLACE_ACTIVITY_IN_PROGRESS"
    """


    """
    STATE_REPLACE_ACTIVITY_SCHEDULED = "REPLACE_ACTIVITY_SCHEDULED"
    """


    """
    STATE_REPLACE_ACTIVITY_SUCCESSFUL = "REPLACE_ACTIVITY_SUCCESSFUL"
    """


    """
    STATE_REPLACED_RPC_CLIENT_OF_TN = "REPLACED_RPC_CLIENT_OF_TN"
    """


    """
    STATE_RETRYING_REPLACE = "RETRYING_REPLACE"
    """


    """
    STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR = "UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR"
    """


    """
    STATE_VM_REDEPLOY_FAILED = "VM_REDEPLOY_FAILED"
    """


    """
    STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING = "VM_RESOURCE_RESERVATION_EDIT_PENDING"
    """


    """
    STATE_REDEPLOYED_VM_REGISTRATION_PENDING = "REDEPLOYED_VM_REGISTRATION_PENDING"
    """


    """
    MAINTENANCE_MODE_STATE_ENTERING = "ENTERING"
    """


    """
    MAINTENANCE_MODE_STATE_ENABLED = "ENABLED"
    """


    """
    MAINTENANCE_MODE_STATE_EXITING = "EXITING"
    """


    """
    MAINTENANCE_MODE_STATE_DISABLED = "DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            'deployment_progress_state': 'deployment_progress_state',
                            'hardware_version': 'hardware_version',
                            'host_switch_states': 'host_switch_states',
                            'maintenance_mode_state': 'maintenance_mode_state',
                            'node_deployment_state': 'node_deployment_state',
                            'pending_user_actions': 'pending_user_actions',
                            'remote_tunnel_endpoint_state': 'remote_tunnel_endpoint_state',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 details=None,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                 deployment_progress_state=None,
                 hardware_version=None,
                 host_switch_states=None,
                 maintenance_mode_state=None,
                 node_deployment_state=None,
                 pending_user_actions=None,
                 remote_tunnel_endpoint_state=None,
                 transport_node_id=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:`TransportNodeState.STATE_PENDING`
            * :attr:`TransportNodeState.STATE_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_SUCCESS`
            * :attr:`TransportNodeState.STATE_FAILED`
            * :attr:`TransportNodeState.STATE_PARTIAL_SUCCESS`
            * :attr:`TransportNodeState.STATE_ORPHANED`
            * :attr:`TransportNodeState.STATE_UNKNOWN`
            * :attr:`TransportNodeState.STATE_ERROR`
            * :attr:`TransportNodeState.STATE_IN_SYNC`
            * :attr:`TransportNodeState.STATE_NOT_AVAILABLE`
            * :attr:`TransportNodeState.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`TransportNodeState.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`TransportNodeState.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_VM_POWER_ON_FAILED`
            * :attr:`TransportNodeState.STATE_REGISTRATION_PENDING`
            * :attr:`TransportNodeState.STATE_NODE_NOT_READY`
            * :attr:`TransportNodeState.STATE_NODE_READY`
            * :attr:`TransportNodeState.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_VM_POWER_OFF_FAILED`
            * :attr:`TransportNodeState.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`TransportNodeState.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`TransportNodeState.STATE_EDGE_CONFIG_ERROR`
            * :attr:`TransportNodeState.STATE_VM_DEPLOYMENT_RESTARTED`
            * :attr:`TransportNodeState.STATE_REGISTRATION_FAILED`
            * :attr:`TransportNodeState.STATE_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`TransportNodeState.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            * :attr:`TransportNodeState.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`TransportNodeState.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`TransportNodeState.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            * :attr:`TransportNodeState.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`TransportNodeState.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`TransportNodeState.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`TransportNodeState.STATE_VTEP_DHCP_NOT_SUPPORTED`
            * :attr:`TransportNodeState.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`TransportNodeState.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            * :attr:`TransportNodeState.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            * :attr:`TransportNodeState.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            * :attr:`TransportNodeState.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`TransportNodeState.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            * :attr:`TransportNodeState.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`TransportNodeState.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`TransportNodeState.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`TransportNodeState.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            * :attr:`TransportNodeState.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`TransportNodeState.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`TransportNodeState.STATE_INVALID_PNIC_DEVICE_NAME`
            * :attr:`TransportNodeState.STATE_TRANSPORT_NODE_READY`
            * :attr:`TransportNodeState.STATE_VM_NETWORK_EDIT_PENDING`
            *
              :attr:`TransportNodeState.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`TransportNodeState.STATE_MPA_DISCONNECTED`
            * :attr:`TransportNodeState.STATE_VM_RENAME_PENDING`
            * :attr:`TransportNodeState.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`TransportNodeState.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`TransportNodeState.STATE_VM_RENAME_FAILED`
            * :attr:`TransportNodeState.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`TransportNodeState.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`TransportNodeState.STATE_VM_NODE_REFRESH_FAILED`
            * :attr:`TransportNodeState.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`TransportNodeState.STATE_REGISTRATION_TIMEDOUT`
            * :attr:`TransportNodeState.STATE_REPLACE_FAILED`
            *
              :attr:`TransportNodeState.STATE_UPLINK_FROM_TEAMING_POLICY_NOT_MAPPED`
            *
              :attr:`TransportNodeState.STATE_LOGICAL_SWITCH_NAMED_TEAMING_HAS_NO_PNIC_BACKING`
            * :attr:`TransportNodeState.STATE_DELETE_VM_IN_REDEPLOY_FAILED`
            * :attr:`TransportNodeState.STATE_DEPLOY_VM_IN_REDEPLOY_FAILED`
            *
              :attr:`TransportNodeState.STATE_INSUFFICIENT_RESOURCES_IN_EDGE_NODE_FOR_SERVICE`
            * :attr:`TransportNodeState.STATE_VM_RESOURCE_RESERVATION_FAILED`
            *
              :attr:`TransportNodeState.STATE_DUPLICATE_PNICS_IN_TEAMINGS_WITH_MULTIPLE_UPLINKS_AND_FAILOVER_ORDER`
            *
              :attr:`TransportNodeState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNICMULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            *
              :attr:`TransportNodeState.STATE_EDGE_NODE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`TransportNodeState.STATE_EDGE_VM_VSPHERE_SETTINGS_MISMATCH_RESOLVE`
            *
              :attr:`TransportNodeState.STATE_EDGE_NODE_SETTINGS_AND_VSPHERE_SETTINGS_ARE_CHANGED_RESOLVE`
            *
              :attr:`TransportNodeState.STATE_EDGE_VSPHERE_LOCATION_MISMATCH_RESOLVE`
            * :attr:`TransportNodeState.STATE_COMPUTE_MANAGER_NOT_FOUND`
            * :attr:`TransportNodeState.STATE_DELETE_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_ADVANCED_CONFIG_EDIT_FAILED`
            *
              :attr:`TransportNodeState.STATE_UPT_MODE_REALIZATION_POLL_TIMED_OUT`
            *
              :attr:`TransportNodeState.STATE_DATAPATH_CONFIGURATION_EDIT_FAILED`
            * :attr:`TransportNodeState.STATE_MAINTENANCE_MODE_ENABLED`
            * :attr:`TransportNodeState.STATE_ERROR_IN_ENABLE_MAINTENANCE_MODE`
            *
              :attr:`TransportNodeState.STATE_ERROR_IN_DISABLE_MAINTENANCE_MODE`
            * :attr:`TransportNodeState.STATE_CONFIGURE_UPT_ON_VM_FAILED`
            * :attr:`TransportNodeState.STATE_VM_VERSION_IS_UPT_INCOMPATIBLE`
            *
              :attr:`TransportNodeState.STATE_DELETE_FAILED_FOR_DIFFERENT_MOREF_ID`
            * :attr:`TransportNodeState.STATE_DELETE_FAILED_ON_VM_NOT_FOUND`
            * :attr:`TransportNodeState.STATE_DELETE_FAILED_FOR_NON_LCM_EDGE`
            * :attr:`TransportNodeState.STATE_ADVANCED_CONFIG_EDIT_PENDING`
            *
              :attr:`TransportNodeState.STATE_DUPLICATE_VLANS_SHARING_SAME_PNIC`
            *
              :attr:`TransportNodeState.STATE_MULTIPLE_UPLINKS_IN_NAMED_TEAMING_NOT_SUPPORTED_IF_UPLINK_IN_DEFAULT_TEAMING`
            * :attr:`TransportNodeState.STATE_REDEPLOY_ACTIVITY_FAILED`
            * :attr:`TransportNodeState.STATE_REDEPLOY_ACTIVITY_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_REDEPLOY_ACTIVITY_SCHEDULED`
            * :attr:`TransportNodeState.STATE_REDEPLOY_ACTIVITY_SUCCESSFUL`
            * :attr:`TransportNodeState.STATE_REPLACE_ACTIVITY_FAILED`
            * :attr:`TransportNodeState.STATE_REPLACE_ACTIVITY_IN_PROGRESS`
            * :attr:`TransportNodeState.STATE_REPLACE_ACTIVITY_SCHEDULED`
            * :attr:`TransportNodeState.STATE_REPLACE_ACTIVITY_SUCCESSFUL`
            * :attr:`TransportNodeState.STATE_REPLACED_RPC_CLIENT_OF_TN`
            * :attr:`TransportNodeState.STATE_RETRYING_REPLACE`
            *
              :attr:`TransportNodeState.STATE_UNABLE_TO_DELETE_EDGE_NODE_VM_INTERNAL_ERROR`
            * :attr:`TransportNodeState.STATE_VM_REDEPLOY_FAILED`
            *
              :attr:`TransportNodeState.STATE_VM_RESOURCE_RESERVATION_EDIT_PENDING`
            *
              :attr:`TransportNodeState.STATE_REDEPLOYED_VM_REGISTRATION_PENDING`
            
            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  deployment_progress_state: :class:`TransportNodeDeploymentProgressState` or ``None``
        :param deployment_progress_state: 
        :type  hardware_version: :class:`str` or ``None``
        :param hardware_version: Hardware version of the edge fabric node virtual machine.
            This 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_switch_states: :class:`list` of :class:`HostSwitchState` or ``None``
        :param host_switch_states: States of HostSwitches on 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  maintenance_mode_state: :class:`str` or ``None``
        :param maintenance_mode_state: Possible values are: 
            
            * :attr:`TransportNodeState.MAINTENANCE_MODE_STATE_ENTERING`
            * :attr:`TransportNodeState.MAINTENANCE_MODE_STATE_ENABLED`
            * :attr:`TransportNodeState.MAINTENANCE_MODE_STATE_EXITING`
            * :attr:`TransportNodeState.MAINTENANCE_MODE_STATE_DISABLED`
            
            the present realized maintenance mode 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  node_deployment_state: :class:`ConfigurationState` or ``None``
        :param node_deployment_state: 
        :type  pending_user_actions: :class:`list` of :class:`str` or ``None``
        :param pending_user_actions: These are actions which user needs to perform to complete the
            transport node realization. One action is
            PENDING_HOST_MAINTENANCE_MODE which informs user to move the host
            into maintenance mode from VC side to complete the transport node
            realization.
            This 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_tunnel_endpoint_state: :class:`RemoteTunnelEndpointConfigState` or ``None``
        :param remote_tunnel_endpoint_state: 
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: Unique 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.details = details
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        self.deployment_progress_state = deployment_progress_state
        self.hardware_version = hardware_version
        self.host_switch_states = host_switch_states
        self.maintenance_mode_state = maintenance_mode_state
        self.node_deployment_state = node_deployment_state
        self.pending_user_actions = pending_user_actions
        self.remote_tunnel_endpoint_state = remote_tunnel_endpoint_state
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


TransportNodeState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_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()),
        'deployment_progress_state': type.OptionalType(type.ReferenceType(__name__, 'TransportNodeDeploymentProgressState')),
        'hardware_version': type.OptionalType(type.StringType()),
        'host_switch_states': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'HostSwitchState'))),
        'maintenance_mode_state': type.OptionalType(type.StringType()),
        'node_deployment_state': type.OptionalType(type.ReferenceType(__name__, 'ConfigurationState')),
        'pending_user_actions': type.OptionalType(type.ListType(type.StringType())),
        'remote_tunnel_endpoint_state': type.OptionalType(type.ReferenceType(__name__, 'RemoteTunnelEndpointConfigState')),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    TransportNodeState,
    False,
    None))



class TransportNodeStateListResult(VapiStruct):
    """
    Transport node state 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_: 
        :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:`TransportNodeState` or ``None``
        :param results: Transport Node State 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.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)


TransportNodeStateListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_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__, 'TransportNodeState'))),
    },
    TransportNodeStateListResult,
    False,
    None))



class TransportNodeStatus(VapiStruct):
    """


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


    """
    MGMT_CONNECTION_STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'agent_status': 'agent_status',
                            'control_connection_status': 'control_connection_status',
                            'evpn_tunnel_status': 'evpn_tunnel_status',
                            'last_aggsvc_heartbeat': 'last_aggsvc_heartbeat',
                            'last_status_changed_time': 'last_status_changed_time',
                            'mgmt_connection_status': 'mgmt_connection_status',
                            'node_display_name': 'node_display_name',
                            'node_path': 'node_path',
                            'node_status': 'node_status',
                            'node_uuid': 'node_uuid',
                            'pnic_status': 'pnic_status',
                            'status': 'status',
                            'status_description': 'status_description',
                            'threat_status': 'threat_status',
                            'tunnel_status': 'tunnel_status',
                            'vm_uuid': 'vm_uuid',
                            }

    def __init__(self,
                 agent_status=None,
                 control_connection_status=None,
                 evpn_tunnel_status=None,
                 last_aggsvc_heartbeat=None,
                 last_status_changed_time=None,
                 mgmt_connection_status=None,
                 node_display_name=None,
                 node_path=None,
                 node_status=None,
                 node_uuid=None,
                 pnic_status=None,
                 status=None,
                 status_description=None,
                 threat_status=None,
                 tunnel_status=None,
                 vm_uuid=None,
                ):
        """
        :type  agent_status: :class:`AgentStatusCount` or ``None``
        :param agent_status: 
        :type  control_connection_status: :class:`StatusCount` or ``None``
        :param control_connection_status: 
        :type  evpn_tunnel_status: :class:`TunnelStatusCount` or ``None``
        :param evpn_tunnel_status: 
        :type  last_aggsvc_heartbeat: :class:`long` or ``None``
        :param last_aggsvc_heartbeat: Timestamp of the last agg-service heartbeat, in epoch milliseconds.
            format: int64
        :type  last_status_changed_time: :class:`long` or ``None``
        :param last_status_changed_time: Timestamp of the last status change, in epoch milliseconds. format:
            int64
        :type  mgmt_connection_status: :class:`str` or ``None``
        :param mgmt_connection_status: Possible values are: 
            
            * :attr:`TransportNodeStatus.MGMT_CONNECTION_STATUS_UP`
            * :attr:`TransportNodeStatus.MGMT_CONNECTION_STATUS_DOWN`
            
            Management connection status
        :type  node_display_name: :class:`str` or ``None``
        :param node_display_name: Transport node display name
        :type  node_path: :class:`str` or ``None``
        :param node_path: Transport node path
        :type  node_status: :class:`NodeStatus` or ``None``
        :param node_status: 
        :type  node_uuid: :class:`str` or ``None``
        :param node_uuid: Transport node uuid
        :type  pnic_status: :class:`StatusCount` or ``None``
        :param pnic_status: 
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TransportNodeStatus.STATUS_UP`
            * :attr:`TransportNodeStatus.STATUS_DOWN`
            * :attr:`TransportNodeStatus.STATUS_DEGRADED`
            * :attr:`TransportNodeStatus.STATUS_UNKNOWN`
            
            Roll-up status of pNIC, management connection, control connection,
            tunnel status, agent status
        :type  status_description: :class:`str` or ``None``
        :param status_description: Describe what makes the status not UP
        :type  threat_status: :class:`ThreatStatus` or ``None``
        :param threat_status: 
        :type  tunnel_status: :class:`TunnelStatusCount` or ``None``
        :param tunnel_status: 
        :type  vm_uuid: :class:`str` or ``None``
        :param vm_uuid: Edge node virtual machine unique identifier. This is reported only
            for Edge Virtual Machine Type deployed on NSX configured host
            nodes.
        """
        self.agent_status = agent_status
        self.control_connection_status = control_connection_status
        self.evpn_tunnel_status = evpn_tunnel_status
        self.last_aggsvc_heartbeat = last_aggsvc_heartbeat
        self.last_status_changed_time = last_status_changed_time
        self.mgmt_connection_status = mgmt_connection_status
        self.node_display_name = node_display_name
        self.node_path = node_path
        self.node_status = node_status
        self.node_uuid = node_uuid
        self.pnic_status = pnic_status
        self.status = status
        self.status_description = status_description
        self.threat_status = threat_status
        self.tunnel_status = tunnel_status
        self.vm_uuid = vm_uuid
        VapiStruct.__init__(self)


TransportNodeStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_status', {
        'agent_status': type.OptionalType(type.ReferenceType(__name__, 'AgentStatusCount')),
        'control_connection_status': type.OptionalType(type.ReferenceType(__name__, 'StatusCount')),
        'evpn_tunnel_status': type.OptionalType(type.ReferenceType(__name__, 'TunnelStatusCount')),
        'last_aggsvc_heartbeat': type.OptionalType(type.IntegerType()),
        'last_status_changed_time': type.OptionalType(type.IntegerType()),
        'mgmt_connection_status': type.OptionalType(type.StringType()),
        'node_display_name': type.OptionalType(type.StringType()),
        'node_path': type.OptionalType(type.StringType()),
        'node_status': type.OptionalType(type.ReferenceType(__name__, 'NodeStatus')),
        'node_uuid': type.OptionalType(type.StringType()),
        'pnic_status': type.OptionalType(type.ReferenceType(__name__, 'StatusCount')),
        'status': type.OptionalType(type.StringType()),
        'status_description': type.OptionalType(type.StringType()),
        'threat_status': type.OptionalType(type.ReferenceType(__name__, 'ThreatStatus')),
        'tunnel_status': type.OptionalType(type.ReferenceType(__name__, 'TunnelStatusCount')),
        'vm_uuid': type.OptionalType(type.StringType()),
    },
    TransportNodeStatus,
    False,
    None))



class TransportNodeStatusListResult(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_: 
        :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:`TransportNodeStatus` or ``None``
        :param results: List of transport node statuses
        """
        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)


TransportNodeStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_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__, 'TransportNodeStatus'))),
    },
    TransportNodeStatusListResult,
    False,
    None))



class TransportNodeStatusReport(VapiStruct):
    """
    transport node status report item

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


    """
    AGENT_STATUS_UP = "UP"
    """


    """
    AGENT_STATUS_DOWN = "DOWN"
    """


    """
    AGENT_STATUS_DEGRADED = "DEGRADED"
    """


    """
    CONTROL_CONNECTION_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    CONTROL_CONNECTION_STATUS_UP = "UP"
    """


    """
    CONTROL_CONNECTION_STATUS_DOWN = "DOWN"
    """


    """
    CONTROL_CONNECTION_STATUS_DEGRADED = "DEGRADED"
    """


    """
    MGMT_CONNECTION_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    MGMT_CONNECTION_STATUS_UP = "UP"
    """


    """
    MGMT_CONNECTION_STATUS_DOWN = "DOWN"
    """


    """
    MGMT_CONNECTION_STATUS_DEGRADED = "DEGRADED"
    """


    """
    PNIC_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    PNIC_STATUS_UP = "UP"
    """


    """
    PNIC_STATUS_DOWN = "DOWN"
    """


    """
    PNIC_STATUS_DEGRADED = "DEGRADED"
    """


    """
    THREAT_STATUS_NORMAL = "NORMAL"
    """


    """
    THREAT_STATUS_ABNORMAL = "ABNORMAL"
    """


    """
    TUNNEL_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    TUNNEL_STATUS_UP = "UP"
    """


    """
    TUNNEL_STATUS_DOWN = "DOWN"
    """


    """
    TUNNEL_STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'agent_status': 'agent_status',
                            'control_connection_status': 'control_connection_status',
                            'down_agent_count': 'down_agent_count',
                            'down_tunnel_count': 'down_tunnel_count',
                            'mgmt_connection_status': 'mgmt_connection_status',
                            'node_uuid': 'node_uuid',
                            'pnic_status': 'pnic_status',
                            'threat_status': 'threat_status',
                            'tunnel_status': 'tunnel_status',
                            'up_agent_count': 'up_agent_count',
                            'up_tunnel_count': 'up_tunnel_count',
                            }

    def __init__(self,
                 agent_status=None,
                 control_connection_status=None,
                 down_agent_count=None,
                 down_tunnel_count=None,
                 mgmt_connection_status=None,
                 node_uuid=None,
                 pnic_status=None,
                 threat_status=None,
                 tunnel_status=None,
                 up_agent_count=None,
                 up_tunnel_count=None,
                ):
        """
        :type  agent_status: :class:`str` or ``None``
        :param agent_status: Possible values are: 
            
            * :attr:`TransportNodeStatusReport.AGENT_STATUS_UNKNOWN`
            * :attr:`TransportNodeStatusReport.AGENT_STATUS_UP`
            * :attr:`TransportNodeStatusReport.AGENT_STATUS_DOWN`
            * :attr:`TransportNodeStatusReport.AGENT_STATUS_DEGRADED`
            
            Agent status
        :type  control_connection_status: :class:`str` or ``None``
        :param control_connection_status: Possible values are: 
            
            *
              :attr:`TransportNodeStatusReport.CONTROL_CONNECTION_STATUS_UNKNOWN`
            * :attr:`TransportNodeStatusReport.CONTROL_CONNECTION_STATUS_UP`
            * :attr:`TransportNodeStatusReport.CONTROL_CONNECTION_STATUS_DOWN`
            *
              :attr:`TransportNodeStatusReport.CONTROL_CONNECTION_STATUS_DEGRADED`
            
            Ccp connection status
        :type  down_agent_count: :class:`long` or ``None``
        :param down_agent_count: Agent down count format: int32
        :type  down_tunnel_count: :class:`long` or ``None``
        :param down_tunnel_count: Tunnel down count format: int32
        :type  mgmt_connection_status: :class:`str` or ``None``
        :param mgmt_connection_status: Possible values are: 
            
            * :attr:`TransportNodeStatusReport.MGMT_CONNECTION_STATUS_UNKNOWN`
            * :attr:`TransportNodeStatusReport.MGMT_CONNECTION_STATUS_UP`
            * :attr:`TransportNodeStatusReport.MGMT_CONNECTION_STATUS_DOWN`
            * :attr:`TransportNodeStatusReport.MGMT_CONNECTION_STATUS_DEGRADED`
            
            Management connection status
        :type  node_uuid: :class:`str` or ``None``
        :param node_uuid: Node uuid
        :type  pnic_status: :class:`str` or ``None``
        :param pnic_status: Possible values are: 
            
            * :attr:`TransportNodeStatusReport.PNIC_STATUS_UNKNOWN`
            * :attr:`TransportNodeStatusReport.PNIC_STATUS_UP`
            * :attr:`TransportNodeStatusReport.PNIC_STATUS_DOWN`
            * :attr:`TransportNodeStatusReport.PNIC_STATUS_DEGRADED`
            
            Pnic status
        :type  threat_status: :class:`str` or ``None``
        :param threat_status: Possible values are: 
            
            * :attr:`TransportNodeStatusReport.THREAT_STATUS_NORMAL`
            * :attr:`TransportNodeStatusReport.THREAT_STATUS_ABNORMAL`
            
            Transport node threat status
        :type  tunnel_status: :class:`str` or ``None``
        :param tunnel_status: Possible values are: 
            
            * :attr:`TransportNodeStatusReport.TUNNEL_STATUS_UNKNOWN`
            * :attr:`TransportNodeStatusReport.TUNNEL_STATUS_UP`
            * :attr:`TransportNodeStatusReport.TUNNEL_STATUS_DOWN`
            * :attr:`TransportNodeStatusReport.TUNNEL_STATUS_DEGRADED`
            
            Tunnel status
        :type  up_agent_count: :class:`long` or ``None``
        :param up_agent_count: Agent up count format: int32
        :type  up_tunnel_count: :class:`long` or ``None``
        :param up_tunnel_count: Tunnel up count format: int32
        """
        self.agent_status = agent_status
        self.control_connection_status = control_connection_status
        self.down_agent_count = down_agent_count
        self.down_tunnel_count = down_tunnel_count
        self.mgmt_connection_status = mgmt_connection_status
        self.node_uuid = node_uuid
        self.pnic_status = pnic_status
        self.threat_status = threat_status
        self.tunnel_status = tunnel_status
        self.up_agent_count = up_agent_count
        self.up_tunnel_count = up_tunnel_count
        VapiStruct.__init__(self)


TransportNodeStatusReport._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_status_report', {
        'agent_status': type.OptionalType(type.StringType()),
        'control_connection_status': type.OptionalType(type.StringType()),
        'down_agent_count': type.OptionalType(type.IntegerType()),
        'down_tunnel_count': type.OptionalType(type.IntegerType()),
        'mgmt_connection_status': type.OptionalType(type.StringType()),
        'node_uuid': type.OptionalType(type.StringType()),
        'pnic_status': type.OptionalType(type.StringType()),
        'threat_status': type.OptionalType(type.StringType()),
        'tunnel_status': type.OptionalType(type.StringType()),
        'up_agent_count': type.OptionalType(type.IntegerType()),
        'up_tunnel_count': type.OptionalType(type.IntegerType()),
    },
    TransportNodeStatusReport,
    False,
    None))



class TransportNodeStatusReportListResult(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_: 
        :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:`TransportNodeStatusReport` or ``None``
        :param results: List of transport node status report
        """
        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)


TransportNodeStatusReportListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_status_report_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__, 'TransportNodeStatusReport'))),
    },
    TransportNodeStatusReportListResult,
    False,
    None))



class TransportNodeVtepAction(VapiStruct):
    """
    An object representing an action on one or more VTEPs

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TransportNodeVtepAction"
    """
    Identifier denoting this class, when it is used 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 = {
                            'action_type': 'action_type',
                            }

    def __init__(self,
                 action_type='TransportNodeVtepAction',
                ):
        """
        :type  action_type: :class:`str`
        :param action_type: Type of action
        """
        self._action_type = action_type
        VapiStruct.__init__(self)

    @property
    def action_type(self):
        """
        Return the discriminator value
        """
        return self._action_type

TransportNodeVtepAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_action', {
        'action_type': type.StringType(),
    },
    TransportNodeVtepAction,
    False,
    None))



class TransportNodeVtepActionReference(VapiStruct):
    """
    An object containing a reference to a submitted action

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



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

    def __init__(self,
                 id=None,
                ):
        """
        :type  id: :class:`str` or ``None``
        :param id: Action identifier
        """
        self.id = id
        VapiStruct.__init__(self)


TransportNodeVtepActionReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_action_reference', {
        'id': type.OptionalType(type.StringType()),
    },
    TransportNodeVtepActionReference,
    False,
    None))



class TransportNodeVtepActionStatus(VapiStruct):
    """
    An object representing the status of an action on one or more VTEPs

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TransportNodeVtepActionStatus"
    """
    Identifier denoting this class, when it is used 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_PENDING = "PENDING"
    """


    """
    STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """



    _canonical_to_pep_names = {
                            'id': 'id',
                            'status': 'status',
                            'status_message': 'status_message',
                            'status_type': 'status_type',
                            }

    def __init__(self,
                 id=None,
                 status=None,
                 status_message=None,
                 status_type='TransportNodeVtepActionStatus',
                ):
        """
        :type  id: :class:`str` or ``None``
        :param id: Action identifier
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TransportNodeVtepActionStatus.STATUS_PENDING`
            * :attr:`TransportNodeVtepActionStatus.STATUS_IN_PROGRESS`
            * :attr:`TransportNodeVtepActionStatus.STATUS_FAILED`
            
            Action status
        :type  status_message: :class:`str` or ``None``
        :param status_message: Action status message
        :type  status_type: :class:`str`
        :param status_type: Type of action status
        """
        self.id = id
        self.status = status
        self.status_message = status_message
        self._status_type = status_type
        VapiStruct.__init__(self)

    @property
    def status_type(self):
        """
        Return the discriminator value
        """
        return self._status_type

TransportNodeVtepActionStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_action_status', {
        'id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'status_message': type.OptionalType(type.StringType()),
        'status_type': type.StringType(),
    },
    TransportNodeVtepActionStatus,
    False,
    None))



class TransportNodeVtepActionsStatusListResult(VapiStruct):
    """
    An object containing status of all VTEP actions for a given TransportNode

    .. 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_: 
        :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: Status of all VTEP actions for a given TransportNode
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`TransportNodeVtepActionStatus`. When methods return a value
            of this class as a return value, the attribute will contain all the
            attributes defined in :class:`TransportNodeVtepActionStatus`.
            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)


TransportNodeVtepActionsStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_actions_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.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'TransportNodeVtepActionStatus')]))),
    },
    TransportNodeVtepActionsStatusListResult,
    False,
    None))



class TransportNodeVtepAdminStateMgmtRequest(VapiStruct):
    """
    An object representing a request to manage the Admin State of a VTEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TransportNodeVtepAdminStateMgmtRequest"
    """
    Identifier denoting this class, when it is used 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 = {
                            'admin_state_up': 'admin_state_up',
                            'device_name': 'device_name',
                            'action_type': 'action_type',
                            }

    def __init__(self,
                 admin_state_up=None,
                 device_name=None,
                 action_type='TransportNodeVtepAdminStateMgmtRequest',
                ):
        """
        :type  admin_state_up: :class:`bool` or ``None``
        :param admin_state_up: Admin State to be turned up or not
        :type  device_name: :class:`str` or ``None``
        :param device_name: VTEP device name
        :type  action_type: :class:`str`
        :param action_type: Type of action
        """
        self.admin_state_up = admin_state_up
        self.device_name = device_name
        self._action_type = action_type
        VapiStruct.__init__(self)

    @property
    def action_type(self):
        """
        Return the discriminator value
        """
        return self._action_type

TransportNodeVtepAdminStateMgmtRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_admin_state_mgmt_request', {
        'admin_state_up': type.OptionalType(type.BooleanType()),
        'device_name': type.OptionalType(type.StringType()),
        'action_type': type.StringType(),
    },
    TransportNodeVtepAdminStateMgmtRequest,
    False,
    None))



class TransportNodeVtepAdminStateMgmtStatus(VapiStruct):
    """
    An object representing the status of a VTEP Admin State mgmt request

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TransportNodeVtepAdminStateMgmtStatus"
    """
    Identifier denoting this class, when it is used 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 = {
                            'admin_state_up': 'admin_state_up',
                            'device_name': 'device_name',
                            'id': 'id',
                            'status': 'status',
                            'status_message': 'status_message',
                            'status_type': 'status_type',
                            }

    def __init__(self,
                 admin_state_up=None,
                 device_name=None,
                 id=None,
                 status=None,
                 status_message=None,
                 status_type='TransportNodeVtepAdminStateMgmtStatus',
                ):
        """
        :type  admin_state_up: :class:`bool` or ``None``
        :param admin_state_up: The request is to turn on Admin State or not
        :type  device_name: :class:`str` or ``None``
        :param device_name: VTEP device name
        :type  id: :class:`str` or ``None``
        :param id: Action identifier
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TransportNodeVtepActionStatus.STATUS_PENDING`
            * :attr:`TransportNodeVtepActionStatus.STATUS_IN_PROGRESS`
            * :attr:`TransportNodeVtepActionStatus.STATUS_FAILED`
            
            Action status
        :type  status_message: :class:`str` or ``None``
        :param status_message: Action status message
        :type  status_type: :class:`str`
        :param status_type: Type of action status
        """
        self.admin_state_up = admin_state_up
        self.device_name = device_name
        self.id = id
        self.status = status
        self.status_message = status_message
        self._status_type = status_type
        VapiStruct.__init__(self)

    @property
    def status_type(self):
        """
        Return the discriminator value
        """
        return self._status_type

TransportNodeVtepAdminStateMgmtStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_admin_state_mgmt_status', {
        'admin_state_up': type.OptionalType(type.BooleanType()),
        'device_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'status_message': type.OptionalType(type.StringType()),
        'status_type': type.StringType(),
    },
    TransportNodeVtepAdminStateMgmtStatus,
    False,
    None))



class TransportNodeVtepRecoveryRequest(VapiStruct):
    """
    An object representing a request to recover an unhealthy VTEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TransportNodeVtepRecoveryRequest"
    """
    Identifier denoting this class, when it is used 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 = {
                            'device_name': 'device_name',
                            'action_type': 'action_type',
                            }

    def __init__(self,
                 device_name=None,
                 action_type='TransportNodeVtepRecoveryRequest',
                ):
        """
        :type  device_name: :class:`str` or ``None``
        :param device_name: VTEP device name
        :type  action_type: :class:`str`
        :param action_type: Type of action
        """
        self.device_name = device_name
        self._action_type = action_type
        VapiStruct.__init__(self)

    @property
    def action_type(self):
        """
        Return the discriminator value
        """
        return self._action_type

TransportNodeVtepRecoveryRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_recovery_request', {
        'device_name': type.OptionalType(type.StringType()),
        'action_type': type.StringType(),
    },
    TransportNodeVtepRecoveryRequest,
    False,
    None))



class TransportNodeVtepRecoveryStatus(VapiStruct):
    """
    An object representing the status of a VTEP recovery request

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TransportNodeVtepRecoveryStatus"
    """
    Identifier denoting this class, when it is used 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 = {
                            'device_name': 'device_name',
                            'id': 'id',
                            'status': 'status',
                            'status_message': 'status_message',
                            'status_type': 'status_type',
                            }

    def __init__(self,
                 device_name=None,
                 id=None,
                 status=None,
                 status_message=None,
                 status_type='TransportNodeVtepRecoveryStatus',
                ):
        """
        :type  device_name: :class:`str` or ``None``
        :param device_name: VTEP device name
        :type  id: :class:`str` or ``None``
        :param id: Action identifier
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TransportNodeVtepActionStatus.STATUS_PENDING`
            * :attr:`TransportNodeVtepActionStatus.STATUS_IN_PROGRESS`
            * :attr:`TransportNodeVtepActionStatus.STATUS_FAILED`
            
            Action status
        :type  status_message: :class:`str` or ``None``
        :param status_message: Action status message
        :type  status_type: :class:`str`
        :param status_type: Type of action status
        """
        self.device_name = device_name
        self.id = id
        self.status = status
        self.status_message = status_message
        self._status_type = status_type
        VapiStruct.__init__(self)

    @property
    def status_type(self):
        """
        Return the discriminator value
        """
        return self._status_type

TransportNodeVtepRecoveryStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_vtep_recovery_status', {
        'device_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'status_message': type.OptionalType(type.StringType()),
        'status_type': type.StringType(),
    },
    TransportNodeVtepRecoveryStatus,
    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: 
        :type  dhcpv6_header: :class:`Dhcpv6Header` or ``None``
        :param dhcpv6_header: 
        :type  dns_header: :class:`DnsHeader` or ``None``
        :param dns_header: 
        :type  icmp_echo_request_header: :class:`IcmpEchoRequestHeader` or ``None``
        :param icmp_echo_request_header: 
        :type  ndp_header: :class:`NdpHeader` or ``None``
        :param ndp_header: 
        :type  tcp_header: :class:`TcpHeader` or ``None``
        :param tcp_header: 
        :type  udp_header: :class:`UdpHeader` or ``None``
        :param 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 TransportZoneEndPoint(VapiStruct):
    """
    Specify which HostSwitch from this TransportNode is used handle traffic for
    given TransportZone

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



    _canonical_to_pep_names = {
                            'transport_zone_id': 'transport_zone_id',
                            'transport_zone_profile_ids': 'transport_zone_profile_ids',
                            }

    def __init__(self,
                 transport_zone_id=None,
                 transport_zone_profile_ids=None,
                ):
        """
        :type  transport_zone_id: :class:`str` or ``None``
        :param transport_zone_id: For MP APIs provide UUID of transport zone. For Policy APIs provide
            policyPath of transport zone.
        :type  transport_zone_profile_ids: :class:`list` of :class:`TransportZoneProfileTypeIdEntry` or ``None``
        :param transport_zone_profile_ids: For MP APIs provide UUID of transport zone profiles. For Policy
            APIs provide policyPath of transport zone profiles.
        """
        self.transport_zone_id = transport_zone_id
        self.transport_zone_profile_ids = transport_zone_profile_ids
        VapiStruct.__init__(self)


TransportZoneEndPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_zone_end_point', {
        'transport_zone_id': type.OptionalType(type.StringType()),
        'transport_zone_profile_ids': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TransportZoneProfileTypeIdEntry'))),
    },
    TransportZoneEndPoint,
    False,
    None))



class TransportZoneProfileTypeIdEntry(VapiStruct):
    """


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


    """



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

    def __init__(self,
                 profile_id=None,
                 resource_type=None,
                ):
        """
        :type  profile_id: :class:`str` or ``None``
        :param profile_id: profile id of the resource type
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: Possible values are: 
            
            *
              :attr:`TransportZoneProfileTypeIdEntry.RESOURCE_TYPE_BFDHEALTHMONITORINGPROFILE`
            
            Selects the type of the transport zone profile
        """
        self.profile_id = profile_id
        self.resource_type = resource_type
        VapiStruct.__init__(self)


TransportZoneProfileTypeIdEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_zone_profile_type_id_entry', {
        'profile_id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
    },
    TransportZoneProfileTypeIdEntry,
    False,
    None))



class Tunnel(VapiStruct):
    """
    polymorphic resource type and support resource types - GreTunnel

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "Tunnel"
    """
    Identifier denoting this class, when it is used 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_GRETUNNEL = "GreTunnel"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': 'enabled',
                            'mtu': 'mtu',
                            'tunnel_address': 'tunnel_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='Tunnel',
                 tags=None,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled=None,
                 mtu=None,
                 tunnel_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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:`Tunnel.RESOURCE_TYPE_GRETUNNEL`
            
            Indicates Resource type of tunnel, GreTunnel - Resource type as
            GreTunnel will be used to configure P2P GRE Tunnel.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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 Tunnel
        :type  mtu: :class:`long` or ``None``
        :param mtu: Maximum transmission unit(MTU) in bytes specifies the size of the
            largest packet that a tunnel can transmit. format: int32
        :type  tunnel_address: :class:`list` of :class:`TunnelAddress` or ``None``
        :param tunnel_address: Specify list of IP address per every edge node for tunnel
            interface. Supports both IPv4 and IPv6 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        self.mtu = mtu
        self.tunnel_address = tunnel_address
        VapiStruct.__init__(self)

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

Tunnel._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'mtu': type.OptionalType(type.IntegerType()),
        'tunnel_address': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TunnelAddress'))),
    },
    Tunnel,
    False,
    None))



class TunnelAddress(VapiStruct):
    """
    Tunnel Address request parameters

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



    _canonical_to_pep_names = {
                            'edge_path': 'edge_path',
                            'source_address': 'source_address',
                            'tunnel_interface_subnet': 'tunnel_interface_subnet',
                            }

    def __init__(self,
                 edge_path=None,
                 source_address=None,
                 tunnel_interface_subnet=None,
                ):
        """
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: policy path of edge node where tunnel will be realized with the
            subnet specified.
        :type  source_address: :class:`str` or ``None``
        :param source_address: Specify IPv4 source addresses as the tunnel local end point
            addresses. format: ipv4
        :type  tunnel_interface_subnet: :class:`list` of :class:`InterfaceSubnet` or ``None``
        :param tunnel_interface_subnet: IP addresses in CIDR format for both IP4 and IPv6 assigned to
            tunnel interface on a given edge node
        """
        self.edge_path = edge_path
        self.source_address = source_address
        self.tunnel_interface_subnet = tunnel_interface_subnet
        VapiStruct.__init__(self)


TunnelAddress._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_address', {
        'edge_path': type.OptionalType(type.StringType()),
        'source_address': type.OptionalType(type.StringType()),
        'tunnel_interface_subnet': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
    },
    TunnelAddress,
    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 or IPv6 Addresses format: ip
        :type  prefix_length: :class:`long` or ``None``
        :param prefix_length: Subnet Prefix Length maximum prefixlen for IPv4 address - 31, IPv6
            address - 127. 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 TunnelKeepAlive(VapiStruct):
    """
    Tunnel Keep Alive

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



    _canonical_to_pep_names = {
                            'dead_time_multiplier': 'dead_time_multiplier',
                            'enable_keepalive_ack': 'enable_keepalive_ack',
                            'enabled': 'enabled',
                            'keepalive_interval': 'keepalive_interval',
                            }

    def __init__(self,
                 dead_time_multiplier=None,
                 enable_keepalive_ack=None,
                 enabled=None,
                 keepalive_interval=None,
                ):
        """
        :type  dead_time_multiplier: :class:`long` or ``None``
        :param dead_time_multiplier: Dead time multiplier format: int32
        :type  enable_keepalive_ack: :class:`bool` or ``None``
        :param enable_keepalive_ack: Enable tunnel keep alive acknowledge
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable/Disable tunnel keep alive
        :type  keepalive_interval: :class:`long` or ``None``
        :param keepalive_interval: Keep alive interval format: int32
        """
        self.dead_time_multiplier = dead_time_multiplier
        self.enable_keepalive_ack = enable_keepalive_ack
        self.enabled = enabled
        self.keepalive_interval = keepalive_interval
        VapiStruct.__init__(self)


TunnelKeepAlive._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_keep_alive', {
        'dead_time_multiplier': type.OptionalType(type.IntegerType()),
        'enable_keepalive_ack': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'keepalive_interval': type.OptionalType(type.IntegerType()),
    },
    TunnelKeepAlive,
    False,
    None))



class TunnelList(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',
                            'tunnels': 'tunnels',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 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_: 
        :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  tunnels: :class:`list` of :class:`TunnelProperties` or ``None``
        :param tunnels: List of transport node tunnels
            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.tunnels = tunnels
        VapiStruct.__init__(self)


TunnelList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_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()),
        'tunnels': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TunnelProperties'))),
    },
    TunnelList,
    False,
    None))



class TunnelPortStatisticsPerNode(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',
                            'sub_cluster_id': 'sub_cluster_id',
                            'transport_node_id': 'transport_node_id',
                            'edge_path': 'edge_path',
                            'logical_router_port_id': 'logical_router_port_id',
                            'source': 'source',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 rx=None,
                 tx=None,
                 sub_cluster_id=None,
                 transport_node_id=None,
                 edge_path=None,
                 logical_router_port_id=None,
                 source=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  sub_cluster_id: :class:`str` or ``None``
        :param sub_cluster_id: The subcluster ID of logical router port. Active-Active service
            router cluster forms pariwise sub cluster of nodes and syncs states
            among them.
            This 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: 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.
        :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  logical_router_port_id: :class:`str` or ``None``
        :param logical_router_port_id: ID of the tunnel router 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  source: :class:`str` or ``None``
        :param source: Tunnel 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.last_update_timestamp = last_update_timestamp
        self.rx = rx
        self.tx = tx
        self.sub_cluster_id = sub_cluster_id
        self.transport_node_id = transport_node_id
        self.edge_path = edge_path
        self.logical_router_port_id = logical_router_port_id
        self.source = source
        VapiStruct.__init__(self)


TunnelPortStatisticsPerNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_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')),
        'sub_cluster_id': type.OptionalType(type.StringType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'edge_path': type.OptionalType(type.StringType()),
        'logical_router_port_id': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.StringType()),
    },
    TunnelPortStatisticsPerNode,
    False,
    None))



class TunnelProperties(VapiStruct):
    """


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


    """
    ENCAP_VXLAN = "VXLAN"
    """


    """
    ENCAP_GENEVE = "GENEVE"
    """


    """
    ENCAP_NONE = "NONE"
    """


    """
    ENCAP_UNKNOWN_ENCAP = "UNKNOWN_ENCAP"
    """


    """
    LATENCY_TYPE_UNKNOWN_LATENCY = "UNKNOWN_LATENCY"
    """


    """
    LATENCY_TYPE_VALID = "VALID"
    """


    """
    LATENCY_TYPE_NOT_READY = "NOT_READY"
    """


    """
    LATENCY_TYPE_TIMEOUT = "TIMEOUT"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'bfd': 'bfd',
                            'egress_interface': 'egress_interface',
                            'encap': 'encap',
                            'last_updated_time': 'last_updated_time',
                            'latency_type': 'latency_type',
                            'latency_value': 'latency_value',
                            'local_ip': 'local_ip',
                            'name': 'name',
                            'remote_ip': 'remote_ip',
                            'remote_node_display_name': 'remote_node_display_name',
                            'remote_node_id': 'remote_node_id',
                            'status': 'status',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 bfd=None,
                 egress_interface=None,
                 encap=None,
                 last_updated_time=None,
                 latency_type=None,
                 latency_value=None,
                 local_ip=None,
                 name=None,
                 remote_ip=None,
                 remote_node_display_name=None,
                 remote_node_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_: 
        :type  bfd: :class:`BFDProperties` or ``None``
        :param bfd: 
        :type  egress_interface: :class:`str` or ``None``
        :param egress_interface: Corresponds to the interface where local_ip_address is routed.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  encap: :class:`str` or ``None``
        :param encap: Possible values are: 
            
            * :attr:`TunnelProperties.ENCAP_STT`
            * :attr:`TunnelProperties.ENCAP_VXLAN`
            * :attr:`TunnelProperties.ENCAP_GENEVE`
            * :attr:`TunnelProperties.ENCAP_NONE`
            * :attr:`TunnelProperties.ENCAP_UNKNOWN_ENCAP`
            
            Tunnel encap
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_updated_time: :class:`long` or ``None``
        :param last_updated_time: Time at which the Tunnel status has been fetched last time. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  latency_type: :class:`str` or ``None``
        :param latency_type: Possible values are: 
            
            * :attr:`TunnelProperties.LATENCY_TYPE_UNKNOWN_LATENCY`
            * :attr:`TunnelProperties.LATENCY_TYPE_VALID`
            * :attr:`TunnelProperties.LATENCY_TYPE_NOT_READY`
            * :attr:`TunnelProperties.LATENCY_TYPE_TIMEOUT`
            
            Latency 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  latency_value: :class:`long` or ``None``
        :param latency_value: The latency value is set only when latency_type is 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  local_ip: :class:`str` or ``None``
        :param local_ip: Local IP address of tunnel 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  name: :class:`str` or ``None``
        :param name: Name of 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  remote_ip: :class:`str` or ``None``
        :param remote_ip: Remote IP address of tunnel 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_node_display_name: :class:`str` or ``None``
        :param remote_node_display_name: Represents the display name of the remote transport node at the
            other end of 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.
        :type  remote_node_id: :class:`str` or ``None``
        :param remote_node_id: UUID of the remote 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  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TunnelProperties.STATUS_UP`
            * :attr:`TunnelProperties.STATUS_DOWN`
            * :attr:`TunnelProperties.STATUS_UNKNOWN`
            
            Status of 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.links = links
        self.schema = schema
        self.self_ = self_
        self.bfd = bfd
        self.egress_interface = egress_interface
        self.encap = encap
        self.last_updated_time = last_updated_time
        self.latency_type = latency_type
        self.latency_value = latency_value
        self.local_ip = local_ip
        self.name = name
        self.remote_ip = remote_ip
        self.remote_node_display_name = remote_node_display_name
        self.remote_node_id = remote_node_id
        self.status = status
        VapiStruct.__init__(self)


TunnelProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_properties', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'bfd': type.OptionalType(type.ReferenceType(__name__, 'BFDProperties')),
        'egress_interface': type.OptionalType(type.StringType()),
        'encap': type.OptionalType(type.StringType()),
        'last_updated_time': type.OptionalType(type.IntegerType()),
        'latency_type': type.OptionalType(type.StringType()),
        'latency_value': type.OptionalType(type.IntegerType()),
        'local_ip': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'remote_ip': type.OptionalType(type.StringType()),
        'remote_node_display_name': type.OptionalType(type.StringType()),
        'remote_node_id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    TunnelProperties,
    False,
    None))



class TunnelStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TunnelStatus"
    """
    Identifier denoting this class, when it is used 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_GRETUNNELSTATUS = "GreTunnelStatus"
    """


    """



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

    def __init__(self,
                 resource_type='TunnelStatus',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`TunnelStatus.RESOURCE_TYPE_GRETUNNELSTATUS`
            
            Indicates Resource type of TunnelStatus, GreTunnelStatus - Resource
            type as GreTunnelStatus will be used to populate P2P GRE Tunnel
            status
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class TunnelStatusCount(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 = {
                            'degraded_count': 'degraded_count',
                            'down_count': 'down_count',
                            'down_pnics': 'down_pnics',
                            'last_status_changed_time': 'last_status_changed_time',
                            'status': 'status',
                            'status_description': 'status_description',
                            'up_count': 'up_count',
                            'bfd_diagnostic': 'bfd_diagnostic',
                            'bfd_status': 'bfd_status',
                            }

    def __init__(self,
                 degraded_count=None,
                 down_count=None,
                 down_pnics=None,
                 last_status_changed_time=None,
                 status=None,
                 status_description=None,
                 up_count=None,
                 bfd_diagnostic=None,
                 bfd_status=None,
                ):
        """
        :type  degraded_count: :class:`long` or ``None``
        :param degraded_count: Degraded count format: int32
        :type  down_count: :class:`long` or ``None``
        :param down_count: Down count format: int32
        :type  down_pnics: :class:`list` of :class:`PnicBondStatus` or ``None``
        :param down_pnics: List Down or Degraded pnics
        :type  last_status_changed_time: :class:`long` or ``None``
        :param last_status_changed_time: Timestamp of the last status change, in epoch milliseconds format:
            int64
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TunnelStatusCount.STATUS_UP`
            * :attr:`TunnelStatusCount.STATUS_DOWN`
            * :attr:`TunnelStatusCount.STATUS_DEGRADED`
            * :attr:`TunnelStatusCount.STATUS_UNKNOWN`
            
            Roll-up status
        :type  status_description: :class:`str` or ``None``
        :param status_description: Describe what makes the status not UP
        :type  up_count: :class:`long` or ``None``
        :param up_count: Up count format: int32
        :type  bfd_diagnostic: :class:`BFDDiagnosticCount` or ``None``
        :param bfd_diagnostic: 
        :type  bfd_status: :class:`BFDStatusCount` or ``None``
        :param bfd_status: 
        """
        self.degraded_count = degraded_count
        self.down_count = down_count
        self.down_pnics = down_pnics
        self.last_status_changed_time = last_status_changed_time
        self.status = status
        self.status_description = status_description
        self.up_count = up_count
        self.bfd_diagnostic = bfd_diagnostic
        self.bfd_status = bfd_status
        VapiStruct.__init__(self)


TunnelStatusCount._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_status_count', {
        'degraded_count': type.OptionalType(type.IntegerType()),
        'down_count': type.OptionalType(type.IntegerType()),
        'down_pnics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PnicBondStatus'))),
        'last_status_changed_time': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
        'status_description': type.OptionalType(type.StringType()),
        'up_count': type.OptionalType(type.IntegerType()),
        'bfd_diagnostic': type.OptionalType(type.ReferenceType(__name__, 'BFDDiagnosticCount')),
        'bfd_status': type.OptionalType(type.ReferenceType(__name__, 'BFDStatusCount')),
    },
    TunnelStatusCount,
    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 TunnelTrafficStatistics(VapiStruct):
    """
    Tunnel Traffic Statistics parent object

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TunnelTrafficStatistics"
    """
    Identifier denoting this class, when it is used 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_GRETUNNELTRAFFICSTATISTICS = "GreTunnelTrafficStatistics"
    """


    """



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

    def __init__(self,
                 resource_type='TunnelTrafficStatistics',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TunnelTrafficStatistics.RESOURCE_TYPE_GRETUNNELTRAFFICSTATISTICS`
            
            GreTunnelTrafficStatistics - Resource type as
            GreTunnelTrafficStatistics will be used to populate P2P GRE Tunnel
            traffic statistics
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

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

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



class UAAgentCommonResource(VapiStruct):
    """
    Common parameters needed to onboard/offboard site to/from NSXi, NDR, and
    Metrics.

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


    """
    ADMIN_ACTION_OFFBOARD = "OFFBOARD"
    """


    """
    ADMIN_ACTION_FORCE_OFFBOARD = "FORCE_OFFBOARD"
    """


    """
    LOG_LEVEL_INFO = "INFO"
    """


    """
    LOG_LEVEL_DEBUG = "DEBUG"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'admin_action': 'admin_action',
                            'correlation_id': 'correlation_id',
                            'instance_id': 'instance_id',
                            'log_level': 'log_level',
                            'org_id': 'org_id',
                            'receiver_endpoint': 'receiver_endpoint',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 admin_action=None,
                 correlation_id=None,
                 instance_id=None,
                 log_level=None,
                 org_id=None,
                 receiver_endpoint=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  admin_action: :class:`str` or ``None``
        :param admin_action: Possible values are: 
            
            * :attr:`UAAgentCommonResource.ADMIN_ACTION_ONBOARD`
            * :attr:`UAAgentCommonResource.ADMIN_ACTION_OFFBOARD`
            * :attr:`UAAgentCommonResource.ADMIN_ACTION_FORCE_OFFBOARD`
            
            Action to perform for NSX+ agents
        :type  correlation_id: :class:`str` or ``None``
        :param correlation_id: Unique identifier created by DGS
        :type  instance_id: :class:`str` or ``None``
        :param instance_id: Id of the NSX+ Instance where the site is onboarded.
        :type  log_level: :class:`str` or ``None``
        :param log_level: Possible values are: 
            
            * :attr:`UAAgentCommonResource.LOG_LEVEL_INFO`
            * :attr:`UAAgentCommonResource.LOG_LEVEL_DEBUG`
            
            Configure log level for NSX+ agents
        :type  org_id: :class:`str` or ``None``
        :param org_id: Id of the NSX+ Organization where the site is onboarded.
        :type  receiver_endpoint: :class:`str` or ``None``
        :param receiver_endpoint: Receiver endpoint used by NSX+ agents to communicate with the cloud
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.admin_action = admin_action
        self.correlation_id = correlation_id
        self.instance_id = instance_id
        self.log_level = log_level
        self.org_id = org_id
        self.receiver_endpoint = receiver_endpoint
        VapiStruct.__init__(self)


UAAgentCommonResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.UA_agent_common_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'admin_action': type.OptionalType(type.StringType()),
        'correlation_id': type.OptionalType(type.StringType()),
        'instance_id': type.OptionalType(type.StringType()),
        'log_level': type.OptionalType(type.StringType()),
        'org_id': type.OptionalType(type.StringType()),
        'receiver_endpoint': type.OptionalType(type.StringType()),
    },
    UAAgentCommonResource,
    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 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: 
        :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: 
        :type  operation: :class:`UnaryOperation` or ``None``
        :param operation: 
        :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 UnidirectionalServicePath(VapiStruct):
    """
    Representing either forward or reverse service path for ingress or egress
    traffic respectively.

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



    _canonical_to_pep_names = {
                            'hops': 'hops',
                            'host_cross_count': 'host_cross_count',
                            'in_maintenance_mode': 'in_maintenance_mode',
                            'is_active': 'is_active',
                            'unidir_service_path_id': 'unidir_service_path_id',
                            }

    def __init__(self,
                 hops=None,
                 host_cross_count=None,
                 in_maintenance_mode=None,
                 is_active=None,
                 unidir_service_path_id=None,
                ):
        """
        :type  hops: :class:`list` of :class:`ServicePathHop` or ``None``
        :param hops: List of service path hops that constitutes the forward or reverse
            service 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  host_cross_count: :class:`long` or ``None``
        :param host_cross_count: The number of times the traffic needs to cross hosts for the given
            forward or reverse service path. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  in_maintenance_mode: :class:`bool` or ``None``
        :param in_maintenance_mode: Is forward or revserse service path in maintenance mode 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  is_active: :class:`bool` or ``None``
        :param is_active: Is forward or revserse service path active 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  unidir_service_path_id: :class:`long` or ``None``
        :param unidir_service_path_id: Unique identifier of one directional service path. format: int64
            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.hops = hops
        self.host_cross_count = host_cross_count
        self.in_maintenance_mode = in_maintenance_mode
        self.is_active = is_active
        self.unidir_service_path_id = unidir_service_path_id
        VapiStruct.__init__(self)


UnidirectionalServicePath._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.unidirectional_service_path', {
        'hops': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ServicePathHop'))),
        'host_cross_count': type.OptionalType(type.IntegerType()),
        'in_maintenance_mode': type.OptionalType(type.BooleanType()),
        'is_active': type.OptionalType(type.BooleanType()),
        'unidir_service_path_id': type.OptionalType(type.IntegerType()),
    },
    UnidirectionalServicePath,
    False,
    None))



class UpgradeCoordinatorDeploymentConfig(VapiStruct):
    """
    Configuration for upgrade-coordinator deployment.

    .. 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cluster_id': 'cluster_id',
                            'deployment_action': 'deployment_action',
                            'kubeconf_info': 'kubeconf_info',
                            'storage_class': 'storage_class',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cluster_id=None,
                 deployment_action=None,
                 kubeconf_info=None,
                 storage_class=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_id: :class:`str` or ``None``
        :param cluster_id: Unique id to identify kubernetes guest cluster.
        :type  deployment_action: :class:`CloudNativeDeploymentAction` or ``None``
        :param deployment_action: 
        :type  kubeconf_info: :class:`KubeconfigInfo` or ``None``
        :param kubeconf_info: 
        :type  storage_class: :class:`str` or ``None``
        :param storage_class: Kubernetes cluster storage class
        :type  version: :class:`str` or ``None``
        :param version: Deployment version in use.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cluster_id = cluster_id
        self.deployment_action = deployment_action
        self.kubeconf_info = kubeconf_info
        self.storage_class = storage_class
        self.version = version
        VapiStruct.__init__(self)


UpgradeCoordinatorDeploymentConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.upgrade_coordinator_deployment_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_id': type.OptionalType(type.StringType()),
        'deployment_action': type.OptionalType(type.ReferenceType(__name__, 'CloudNativeDeploymentAction')),
        'kubeconf_info': type.OptionalType(type.ReferenceType(__name__, 'KubeconfigInfo')),
        'storage_class': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
    },
    UpgradeCoordinatorDeploymentConfig,
    False,
    None))



class UpgradeTopology(VapiStruct):
    """
    Recommended topology for migrating NVDS to VDS

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



    _canonical_to_pep_names = {
                            'topology': 'topology',
                            }

    def __init__(self,
                 topology=None,
                ):
        """
        :type  topology: :class:`list` of :class:`NvdsUpgradeTopology` or ``None``
        :param topology: All resultant VDS mapping for a NVDS after the migration
        """
        self.topology = topology
        VapiStruct.__init__(self)


UpgradeTopology._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.upgrade_topology', {
        'topology': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NvdsUpgradeTopology'))),
    },
    UpgradeTopology,
    False,
    None))



class Uplink(VapiStruct):
    """
    Object to identify an uplink based on its type and name

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


    """
    UPLINK_TYPE_LAG = "LAG"
    """


    """



    _canonical_to_pep_names = {
                            'uplink_name': 'uplink_name',
                            'uplink_type': 'uplink_type',
                            }

    def __init__(self,
                 uplink_name=None,
                 uplink_type=None,
                ):
        """
        :type  uplink_name: :class:`str` or ``None``
        :param uplink_name: Name of this uplink
        :type  uplink_type: :class:`str` or ``None``
        :param uplink_type: Possible values are: 
            
            * :attr:`Uplink.UPLINK_TYPE_PNIC`
            * :attr:`Uplink.UPLINK_TYPE_LAG`
            
            Type of the uplink
        """
        self.uplink_name = uplink_name
        self.uplink_type = uplink_type
        VapiStruct.__init__(self)


Uplink._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.uplink', {
        'uplink_name': type.OptionalType(type.StringType()),
        'uplink_type': type.OptionalType(type.StringType()),
    },
    Uplink,
    False,
    None))



class UploadBundleId(VapiStruct):
    """
    Bundle Id for uploaded file.

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



    _canonical_to_pep_names = {
                            'bundle_id': 'bundle_id',
                            }

    def __init__(self,
                 bundle_id=None,
                ):
        """
        :type  bundle_id: :class:`str` or ``None``
        :param bundle_id: Bundle id of uploaded file.
        """
        self.bundle_id = bundle_id
        VapiStruct.__init__(self)


UploadBundleId._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.upload_bundle_id', {
        'bundle_id': type.OptionalType(type.StringType()),
    },
    UploadBundleId,
    False,
    None))



class UploadBundleRemoteServer(VapiStruct):
    """
    Upload bundle from remote server.

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


    """
    PROTOCOL_HTTPS = "HTTPS"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'port': 'port',
                            'protocol': 'protocol',
                            'server': 'server',
                            'uri': 'uri',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 port=None,
                 protocol=None,
                 server=None,
                 uri=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  port: :class:`str` or ``None``
        :param port: Remote server port.
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`UploadBundleRemoteServer.PROTOCOL_HTTP`
            * :attr:`UploadBundleRemoteServer.PROTOCOL_HTTPS`
            
            Protocol used HTTP or HTTPS.
        :type  server: :class:`str` or ``None``
        :param server: Remote server IP or FQDN. format: hostname-or-ip
        :type  uri: :class:`str` or ``None``
        :param uri: Relative path to download file from remote 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.port = port
        self.protocol = protocol
        self.server = server
        self.uri = uri
        VapiStruct.__init__(self)


UploadBundleRemoteServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.upload_bundle_remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'port': type.OptionalType(type.StringType()),
        'protocol': type.OptionalType(type.StringType()),
        'server': type.OptionalType(type.StringType()),
        'uri': type.OptionalType(type.StringType()),
    },
    UploadBundleRemoteServer,
    False,
    None))



class UploadBundleStatus(VapiStruct):
    """
    Status of uploaded bundle.

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


    """
    PROTOCOL_HTTPS = "HTTPS"
    """


    """
    STATUS_UPLOADING = "UPLOADING"
    """


    """
    STATUS_DOWNLOADING = "DOWNLOADING"
    """


    """
    STATUS_EXTRACTING = "EXTRACTING"
    """


    """
    STATUS_VERIFYING = "VERIFYING"
    """


    """
    STATUS_SUCCESS = "SUCCESS"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'port': 'port',
                            'protocol': 'protocol',
                            'server': 'server',
                            'uri': 'uri',
                            'percent': 'percent',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 port=None,
                 protocol=None,
                 server=None,
                 uri=None,
                 percent=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: More detail about tools bundle file upload.
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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  port: :class:`str` or ``None``
        :param port: Remote server port.
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`UploadBundleStatus.PROTOCOL_HTTP`
            * :attr:`UploadBundleStatus.PROTOCOL_HTTPS`
            
            Protocol used HTTP or HTTPS.
        :type  server: :class:`str` or ``None``
        :param server: Remote server IP or FQDN. format: hostname-or-ip
        :type  uri: :class:`str` or ``None``
        :param uri: Relative path to download file from remote server.
        :type  percent: :class:`float` or ``None``
        :param percent: Upload percentage for tools bundle file.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`UploadBundleStatus.STATUS_UPLOADING`
            * :attr:`UploadBundleStatus.STATUS_DOWNLOADING`
            * :attr:`UploadBundleStatus.STATUS_EXTRACTING`
            * :attr:`UploadBundleStatus.STATUS_VERIFYING`
            * :attr:`UploadBundleStatus.STATUS_SUCCESS`
            * :attr:`UploadBundleStatus.STATUS_FAILED`
            
            Current state of bundle upload. UPLOADING - Upload in progress.
            DOWNLOADING - Download in progress. EXTRACTING - Extract in
            progress. VERIFYING - Verifying signature of uploaded bundle.
            SUCCESS - Upload complete. FAILED - Upload failed.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.port = port
        self.protocol = protocol
        self.server = server
        self.uri = uri
        self.percent = percent
        self.status = status
        VapiStruct.__init__(self)


UploadBundleStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.upload_bundle_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'port': type.OptionalType(type.StringType()),
        'protocol': type.OptionalType(type.StringType()),
        'server': type.OptionalType(type.StringType()),
        'uri': type.OptionalType(type.StringType()),
        'percent': type.OptionalType(type.DoubleType()),
        'status': type.OptionalType(type.StringType()),
    },
    UploadBundleStatus,
    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.
    """
    REQUEST_METHOD_GET = "Get"
    """


    """
    REQUEST_METHOD_POST = "Post"
    """


    """



    _canonical_to_pep_names = {
                            'alias': 'alias',
                            'keystore_info': 'keystore_info',
                            'query': 'query',
                            'request_body': 'request_body',
                            'request_headers': 'request_headers',
                            'request_method': 'request_method',
                            'url': 'url',
                            }

    def __init__(self,
                 alias=None,
                 keystore_info=None,
                 query=None,
                 request_body=None,
                 request_headers=None,
                 request_method=None,
                 url=None,
                ):
        """
        :type  alias: :class:`str` or ``None``
        :param alias: 
        :type  keystore_info: :class:`KeyStoreInfo` or ``None``
        :param keystore_info: 
        :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  request_body: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_body: A raw request body in the form json format for a given url. This
            request body will be submitted along with request while giving a
            post api call.
        :type  request_headers: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param request_headers: A raw request header in the form json format for a given url. This
            request header will be submitted along with request while giving a
            api call.
        :type  request_method: :class:`str` or ``None``
        :param request_method: Possible values are: 
            
            * :attr:`UrlAlias.REQUEST_METHOD_GET`
            * :attr:`UrlAlias.REQUEST_METHOD_POST`
            
            Type of the http method (Get, Post) to be used while invoking the
            given url through dashboard datasource framework.
        :type  url: :class:`str` or ``None``
        :param url: Url to fetch data from.
        """
        self.alias = alias
        self.keystore_info = keystore_info
        self.query = query
        self.request_body = request_body
        self.request_headers = request_headers
        self.request_method = request_method
        self.url = url
        VapiStruct.__init__(self)


UrlAlias._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.url_alias', {
        'alias': type.OptionalType(type.StringType()),
        'keystore_info': type.OptionalType(type.ReferenceType(__name__, 'KeyStoreInfo')),
        'query': type.OptionalType(type.StringType()),
        'request_body': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'request_headers': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'request_method': 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',
                            'roles_for_paths': 'roles_for_paths',
                            'user_name': 'user_name',
                            }

    def __init__(self,
                 roles=None,
                 roles_for_paths=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  roles_for_paths: :class:`list` of :class:`RolesForPath` or ``None``
        :param roles_for_paths: The roles that are associated with the user, limiting them to a
            path. In case the path is null, the roles apply everywhere i.e. it
            is same as the deprecated property roles.
        :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.roles_for_paths = roles_for_paths
        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'))),
        'roles_for_paths': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RolesForPath'))),
        '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: int64
        """
        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 VMTagReplicationPolicy(VapiStruct):
    """
    A policy to replicate tags from once site to other sites.

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


    """
    REPLICATION_TYPE_STORAGE_ARRAY_REPLICATION = "STORAGE_ARRAY_REPLICATION"
    """


    """
    REPLICATION_TYPE_OTHER = "OTHER"
    """


    """
    VM_MATCH_CRITERIA_NSX_ATTACHMENT_ID = "MATCH_NSX_ATTACHMENT_ID"
    """


    """
    VM_MATCH_CRITERIA_BIOS_UUID_NAME = "MATCH_BIOS_UUID_NAME"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'groups': 'groups',
                            'protected_site': 'protected_site',
                            'recovery_sites': 'recovery_sites',
                            'replication_type': 'replication_type',
                            'tag_delay_delete_time': 'tag_delay_delete_time',
                            'vm_match_criteria': 'vm_match_criteria',
                            }

    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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 groups=None,
                 protected_site=None,
                 recovery_sites=None,
                 replication_type=None,
                 tag_delay_delete_time=None,
                 vm_match_criteria=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Paths of groups (VM tag-based, VM name-based, etc.) that translates
            into VMs to be replicated from protected site to recovery sites. If
            no group is specified, none of the VM tag will be replicated from
            protected site to recovery sites.
        :type  protected_site: :class:`str` or ``None``
        :param protected_site: A path of protected site, from where tags of selected VMs will be
            replicated to recovery sites.
        :type  recovery_sites: :class:`list` of :class:`str` or ``None``
        :param recovery_sites: Paths of recovery sites, where tags of selected VMs will be
            replicated to, from protected site.
        :type  replication_type: :class:`str` or ``None``
        :param replication_type: Possible values are: 
            
            *
              :attr:`VMTagReplicationPolicy.REPLICATION_TYPE_VSPHERE_REPLICATION`
            *
              :attr:`VMTagReplicationPolicy.REPLICATION_TYPE_STORAGE_ARRAY_REPLICATION`
            * :attr:`VMTagReplicationPolicy.REPLICATION_TYPE_OTHER`
            
            Specifies type of replication used in DR (Disaster Recovery)
            failover.
        :type  tag_delay_delete_time: :class:`long` or ``None``
        :param tag_delay_delete_time: This specifies delay in minutes which is used for deletion of tags
            of virtual machines on recovery site. If a VM is deleted on
            protected site and has not appeared on recovery site (e.g. this can
            happen primarily when array based storage replication is used with
            SRM and DR failover is run while protected site is reachable), the
            tags will be retained for this much amount of time on recovery
            site. VM appears within this much time on recovery site, then tags
            will get applied on recovery site. If replication type is
            VSPHERE_REPLICATION or OTHER, then its default value is 0 minutes.
            If replication type is STORAGE_ARRAY_REPLICATION, then its default
            value is 30 minutes. If this value is not specified, then default
            value according to replication type will be applicable. The time
            for virtual machines to appear on recovery site after those are
            deleted from primary site in case of storage replication depends on
            count of virtual machines configured to failover, storage array
            performance and ESXi host. format: int64
        :type  vm_match_criteria: :class:`str` or ``None``
        :param vm_match_criteria: Possible values are: 
            
            *
              :attr:`VMTagReplicationPolicy.VM_MATCH_CRITERIA_NSX_ATTACHMENT_ID`
            * :attr:`VMTagReplicationPolicy.VM_MATCH_CRITERIA_BIOS_UUID_NAME`
            
            Matching criteria used for associating VMs from protected site to
            VMs on recovery sites. - MATCH_NSX_ATTACHMENT_ID : Associate VMs
            from the protected site and recovery sites based on NSX attachment
            ID. - MATCH_BIOS_UUID_NAME : Associate VMs from the protected site
            and recovery sites based on (VM BIOS UUID + VM 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.groups = groups
        self.protected_site = protected_site
        self.recovery_sites = recovery_sites
        self.replication_type = replication_type
        self.tag_delay_delete_time = tag_delay_delete_time
        self.vm_match_criteria = vm_match_criteria
        VapiStruct.__init__(self)


VMTagReplicationPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.VM_tag_replication_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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())),
        'protected_site': type.OptionalType(type.StringType()),
        'recovery_sites': type.OptionalType(type.ListType(type.StringType())),
        'replication_type': type.OptionalType(type.StringType()),
        'tag_delay_delete_time': type.OptionalType(type.IntegerType()),
        'vm_match_criteria': type.OptionalType(type.StringType()),
    },
    VMTagReplicationPolicy,
    False,
    None))



class VMTagReplicationPolicyListResult(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_: 
        :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 the VM tag replication policies 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  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:`VMTagReplicationPolicy` or ``None``
        :param results: Collection of VM tag replication policies
            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)


VMTagReplicationPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.VM_tag_replication_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__, 'VMTagReplicationPolicy'))),
    },
    VMTagReplicationPolicyListResult,
    False,
    None))



class ValidationError(VapiStruct):
    """
    Error while applying transport node profile on discovered node

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



    _canonical_to_pep_names = {
                            'discovered_node_id': 'discovered_node_id',
                            'error_message': 'error_message',
                            }

    def __init__(self,
                 discovered_node_id=None,
                 error_message=None,
                ):
        """
        :type  discovered_node_id: :class:`str` or ``None``
        :param discovered_node_id: Discovered 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  error_message: :class:`str` or ``None``
        :param error_message: Validation error message
            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.discovered_node_id = discovered_node_id
        self.error_message = error_message
        VapiStruct.__init__(self)


ValidationError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.validation_error', {
        'discovered_node_id': type.OptionalType(type.StringType()),
        'error_message': type.OptionalType(type.StringType()),
    },
    ValidationError,
    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',
                            'values_with_type': 'values_with_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',
                            }

    def __init__(self,
                 operator=None,
                 values=None,
                 values_with_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='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.

            .. deprecated:: unknown
        :type  values_with_type: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param values_with_type: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ConstraintValue`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`ConstraintValue`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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.values_with_type = values_with_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
        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())),
        'values_with_type': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ConstraintValue')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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 Vdl2Counters(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'arp_proxy_req_fail_drops': 'arp_proxy_req_fail_drops',
                            'arp_proxy_req_suppress': 'arp_proxy_req_suppress',
                            'arp_proxy_resp': 'arp_proxy_resp',
                            'arp_proxy_resp_drops': 'arp_proxy_resp_drops',
                            'arp_proxy_resp_filtered': 'arp_proxy_resp_filtered',
                            'arp_proxy_resp_unknown': 'arp_proxy_resp_unknown',
                            'leaf_rx': 'leaf_rx',
                            'leaf_rx_drops': 'leaf_rx_drops',
                            'leaf_rx_ref_port_not_found_drops': 'leaf_rx_ref_port_not_found_drops',
                            'leaf_rx_system_err_drops': 'leaf_rx_system_err_drops',
                            'leaf_tx': 'leaf_tx',
                            'leaf_tx_drops': 'leaf_tx_drops',
                            'mac_tbl_lookup_flood': 'mac_tbl_lookup_flood',
                            'mac_tbl_lookup_full': 'mac_tbl_lookup_full',
                            'mac_tbl_update_full': 'mac_tbl_update_full',
                            'mcast_proxy_rx_drops': 'mcast_proxy_rx_drops',
                            'mcast_proxy_tx_drops': 'mcast_proxy_tx_drops',
                            'nd_proxy_req_fail_drops': 'nd_proxy_req_fail_drops',
                            'nd_proxy_req_suppress': 'nd_proxy_req_suppress',
                            'nd_proxy_resp': 'nd_proxy_resp',
                            'nd_proxy_resp_drops': 'nd_proxy_resp_drops',
                            'nd_proxy_resp_filtered': 'nd_proxy_resp_filtered',
                            'nd_proxy_resp_unknown': 'nd_proxy_resp_unknown',
                            'nested_tn_mcast_proxy_diff_vlan_tx_drops': 'nested_tn_mcast_proxy_diff_vlan_tx_drops',
                            'nested_tn_mcast_proxy_same_vlan_tx_drops': 'nested_tn_mcast_proxy_same_vlan_tx_drops',
                            'uplink_rx': 'uplink_rx',
                            'uplink_rx_drops': 'uplink_rx_drops',
                            'uplink_rx_filtered': 'uplink_rx_filtered',
                            'uplink_rx_guest_vlan_drops': 'uplink_rx_guest_vlan_drops',
                            'uplink_rx_invalid_encap_drops': 'uplink_rx_invalid_encap_drops',
                            'uplink_rx_mcast_invalid_dr_uplink_drops': 'uplink_rx_mcast_invalid_dr_uplink_drops',
                            'uplink_rx_skip_mac_learn': 'uplink_rx_skip_mac_learn',
                            'uplink_rx_system_err_drops': 'uplink_rx_system_err_drops',
                            'uplink_rx_wrong_dest_drops': 'uplink_rx_wrong_dest_drops',
                            'uplink_tx': 'uplink_tx',
                            'uplink_tx_drops': 'uplink_tx_drops',
                            'uplink_tx_flood_rate_limit': 'uplink_tx_flood_rate_limit',
                            'uplink_tx_ignore': 'uplink_tx_ignore',
                            'uplink_tx_invalid_frame_drops': 'uplink_tx_invalid_frame_drops',
                            'uplink_tx_invalid_state_drops': 'uplink_tx_invalid_state_drops',
                            'uplink_tx_nested_tn_repl_drops': 'uplink_tx_nested_tn_repl_drops',
                            'uplink_tx_non_unicast': 'uplink_tx_non_unicast',
                            'uplink_tx_teaming_drops': 'uplink_tx_teaming_drops',
                            'uplink_tx_ucast_flood': 'uplink_tx_ucast_flood',
                            }

    def __init__(self,
                 arp_proxy_req_fail_drops=None,
                 arp_proxy_req_suppress=None,
                 arp_proxy_resp=None,
                 arp_proxy_resp_drops=None,
                 arp_proxy_resp_filtered=None,
                 arp_proxy_resp_unknown=None,
                 leaf_rx=None,
                 leaf_rx_drops=None,
                 leaf_rx_ref_port_not_found_drops=None,
                 leaf_rx_system_err_drops=None,
                 leaf_tx=None,
                 leaf_tx_drops=None,
                 mac_tbl_lookup_flood=None,
                 mac_tbl_lookup_full=None,
                 mac_tbl_update_full=None,
                 mcast_proxy_rx_drops=None,
                 mcast_proxy_tx_drops=None,
                 nd_proxy_req_fail_drops=None,
                 nd_proxy_req_suppress=None,
                 nd_proxy_resp=None,
                 nd_proxy_resp_drops=None,
                 nd_proxy_resp_filtered=None,
                 nd_proxy_resp_unknown=None,
                 nested_tn_mcast_proxy_diff_vlan_tx_drops=None,
                 nested_tn_mcast_proxy_same_vlan_tx_drops=None,
                 uplink_rx=None,
                 uplink_rx_drops=None,
                 uplink_rx_filtered=None,
                 uplink_rx_guest_vlan_drops=None,
                 uplink_rx_invalid_encap_drops=None,
                 uplink_rx_mcast_invalid_dr_uplink_drops=None,
                 uplink_rx_skip_mac_learn=None,
                 uplink_rx_system_err_drops=None,
                 uplink_rx_wrong_dest_drops=None,
                 uplink_tx=None,
                 uplink_tx_drops=None,
                 uplink_tx_flood_rate_limit=None,
                 uplink_tx_ignore=None,
                 uplink_tx_invalid_frame_drops=None,
                 uplink_tx_invalid_state_drops=None,
                 uplink_tx_nested_tn_repl_drops=None,
                 uplink_tx_non_unicast=None,
                 uplink_tx_teaming_drops=None,
                 uplink_tx_ucast_flood=None,
                ):
        """
        :type  arp_proxy_req_fail_drops: :class:`long` or ``None``
        :param arp_proxy_req_fail_drops: Count of ARPs failed to send on uplinks for CCP unaware bindings
            format: int64
            This 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_proxy_req_suppress: :class:`long` or ``None``
        :param arp_proxy_req_suppress: Count of ARPs suppression attempted at Leaf Input IOChain format:
            int64
            This 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_proxy_resp: :class:`long` or ``None``
        :param arp_proxy_resp: Count of successful IP-MAC binding message from CCP for ARP
            suppression format: int64
            This 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_proxy_resp_drops: :class:`long` or ``None``
        :param arp_proxy_resp_drops: Count of ARP response failed for each ARP suppressed 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  arp_proxy_resp_filtered: :class:`long` or ``None``
        :param arp_proxy_resp_filtered: Count of ARP responses skipped for each successful IP-MAC response
            from CCP format: int64
            This 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_proxy_resp_unknown: :class:`long` or ``None``
        :param arp_proxy_resp_unknown: Count of unknown IP-MAC binding message from CCP for ARP
            suppression format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  leaf_rx: :class:`long` or ``None``
        :param leaf_rx: Count of packets received at VDL2LeafInput IOChain of a switchport
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  leaf_rx_drops: :class:`long` or ``None``
        :param leaf_rx_drops: Total drops at VDL2LeafInput IOChain of a switchport format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  leaf_rx_ref_port_not_found_drops: :class:`long` or ``None``
        :param leaf_rx_ref_port_not_found_drops: VDL2LeafInput drops as trunk port is not in logical switch format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  leaf_rx_system_err_drops: :class:`long` or ``None``
        :param leaf_rx_system_err_drops: VDL2LeafInput drops on an LS due to system errors format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  leaf_tx: :class:`long` or ``None``
        :param leaf_tx: Count of packets processed at VDL2LeafOutput IOChain of a
            switchport format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  leaf_tx_drops: :class:`long` or ``None``
        :param leaf_tx_drops: Total drops at VDL2LeafOutput IOChain of a switchport format: int64
            This 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_tbl_lookup_flood: :class:`long` or ``None``
        :param mac_tbl_lookup_flood: Count of unicast packets flooded onto remote VTEPs due to MAC table
            full format: int64
            This 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_tbl_lookup_full: :class:`long` or ``None``
        :param mac_tbl_lookup_full: Number of VM MAC query to CCP failure due to MAC table full format:
            int64
            This 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_tbl_update_full: :class:`long` or ``None``
        :param mac_tbl_update_full: Number of packet's SMAC learning failed at uplink due to MAC table
            full format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mcast_proxy_rx_drops: :class:`long` or ``None``
        :param mcast_proxy_rx_drops: Count of BUM replicated packets dropped at MTEP TN at uplink input
            IOChain format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mcast_proxy_tx_drops: :class:`long` or ``None``
        :param mcast_proxy_tx_drops: Count of BUM packets dropped at uplink output IOChain format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nd_proxy_req_fail_drops: :class:`long` or ``None``
        :param nd_proxy_req_fail_drops: Count of ND packets failed to send on uplinks for CCP unaware
            bindings format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nd_proxy_req_suppress: :class:`long` or ``None``
        :param nd_proxy_req_suppress: Count of NDs suppression attempted at Leaf Input IOChain format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nd_proxy_resp: :class:`long` or ``None``
        :param nd_proxy_resp: Count of successful IP-MAC binding message from CCP for ND
            suppression format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nd_proxy_resp_drops: :class:`long` or ``None``
        :param nd_proxy_resp_drops: Count of ND response failed for each ND suppressed 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  nd_proxy_resp_filtered: :class:`long` or ``None``
        :param nd_proxy_resp_filtered: Count of ND responses skipped for each successful IP-MAC response
            from CCP format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nd_proxy_resp_unknown: :class:`long` or ``None``
        :param nd_proxy_resp_unknown: Count of unknown IP-MAC binding message from CCP for ND suppression
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nested_tn_mcast_proxy_diff_vlan_tx_drops: :class:`long` or ``None``
        :param nested_tn_mcast_proxy_diff_vlan_tx_drops: Count of BUM replicated packet drops destined to nested TN format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nested_tn_mcast_proxy_same_vlan_tx_drops: :class:`long` or ``None``
        :param nested_tn_mcast_proxy_same_vlan_tx_drops: Count of BUM replicated packet drops destined to nested TN format:
            int64
            This 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_rx: :class:`long` or ``None``
        :param uplink_rx: Count of packets received at uplink port from underlay network
            format: int64
            This 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_rx_drops: :class:`long` or ``None``
        :param uplink_rx_drops: Count of packets from underlay that are dropped at uplink input
            IOChain format: int64
            This 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_rx_filtered: :class:`long` or ``None``
        :param uplink_rx_filtered: Packets received at uplink filtered at uplink IOChain format: int64
            This 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_rx_guest_vlan_drops: :class:`long` or ``None``
        :param uplink_rx_guest_vlan_drops: Drop at uplink input IOChain due to failure to remove guest VLAN
            tag format: int64
            This 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_rx_invalid_encap_drops: :class:`long` or ``None``
        :param uplink_rx_invalid_encap_drops: Count of packets dropped at uplink input IOChain due to incorrect
            Encap format: int64
            This 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_rx_mcast_invalid_dr_uplink_drops: :class:`long` or ``None``
        :param uplink_rx_mcast_invalid_dr_uplink_drops: Count of IP multicast packets dropped at unexpected DR uplink
            format: int64
            This 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_rx_skip_mac_learn: :class:`long` or ``None``
        :param uplink_rx_skip_mac_learn: Count of packets for which MAC learn was skipped at uplink input
            IOChain format: int64
            This 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_rx_system_err_drops: :class:`long` or ``None``
        :param uplink_rx_system_err_drops: Drop at uplink input IOChain due to system errors format: int64
            This 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_rx_wrong_dest_drops: :class:`long` or ``None``
        :param uplink_rx_wrong_dest_drops: Drop at uplink port input IOChain due to incorrect destination VTEP
            IP format: int64
            This 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_tx: :class:`long` or ``None``
        :param uplink_tx: Count of packets transmitted through uplink port towards underlay
            network format: int64
            This 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_tx_drops: :class:`long` or ``None``
        :param uplink_tx_drops: Total DVS sent packet drops at uplink output IOChain format: int64
            This 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_tx_flood_rate_limit: :class:`long` or ``None``
        :param uplink_tx_flood_rate_limit: Count of rate limited unknown unicast packets at uplink output
            IOChain format: int64
            This 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_tx_ignore: :class:`long` or ``None``
        :param uplink_tx_ignore: Count of DVS sent packets ignored at uplink output IOChain format:
            int64
            This 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_tx_invalid_frame_drops: :class:`long` or ``None``
        :param uplink_tx_invalid_frame_drops: Count of invalid packets dropped at uplink IOChain format: int64
            This 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_tx_invalid_state_drops: :class:`long` or ``None``
        :param uplink_tx_invalid_state_drops: Packet drops at uplink IOChain due to incorrect uplink VLAN
            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  uplink_tx_nested_tn_repl_drops: :class:`long` or ``None``
        :param uplink_tx_nested_tn_repl_drops: Count of packets to nested TN dropped at uplink output IOChain
            format: int64
            This 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_tx_non_unicast: :class:`long` or ``None``
        :param uplink_tx_non_unicast: Count of broadcast,multicast packets replicated to remote VTEPs
            format: int64
            This 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_tx_teaming_drops: :class:`long` or ``None``
        :param uplink_tx_teaming_drops: Count of packets dropped at uplink IOChain due to uplink teaming
            failure format: int64
            This 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_tx_ucast_flood: :class:`long` or ``None``
        :param uplink_tx_ucast_flood: Count of unknown unicast packets at uplink output IOChain format:
            int64
            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.arp_proxy_req_fail_drops = arp_proxy_req_fail_drops
        self.arp_proxy_req_suppress = arp_proxy_req_suppress
        self.arp_proxy_resp = arp_proxy_resp
        self.arp_proxy_resp_drops = arp_proxy_resp_drops
        self.arp_proxy_resp_filtered = arp_proxy_resp_filtered
        self.arp_proxy_resp_unknown = arp_proxy_resp_unknown
        self.leaf_rx = leaf_rx
        self.leaf_rx_drops = leaf_rx_drops
        self.leaf_rx_ref_port_not_found_drops = leaf_rx_ref_port_not_found_drops
        self.leaf_rx_system_err_drops = leaf_rx_system_err_drops
        self.leaf_tx = leaf_tx
        self.leaf_tx_drops = leaf_tx_drops
        self.mac_tbl_lookup_flood = mac_tbl_lookup_flood
        self.mac_tbl_lookup_full = mac_tbl_lookup_full
        self.mac_tbl_update_full = mac_tbl_update_full
        self.mcast_proxy_rx_drops = mcast_proxy_rx_drops
        self.mcast_proxy_tx_drops = mcast_proxy_tx_drops
        self.nd_proxy_req_fail_drops = nd_proxy_req_fail_drops
        self.nd_proxy_req_suppress = nd_proxy_req_suppress
        self.nd_proxy_resp = nd_proxy_resp
        self.nd_proxy_resp_drops = nd_proxy_resp_drops
        self.nd_proxy_resp_filtered = nd_proxy_resp_filtered
        self.nd_proxy_resp_unknown = nd_proxy_resp_unknown
        self.nested_tn_mcast_proxy_diff_vlan_tx_drops = nested_tn_mcast_proxy_diff_vlan_tx_drops
        self.nested_tn_mcast_proxy_same_vlan_tx_drops = nested_tn_mcast_proxy_same_vlan_tx_drops
        self.uplink_rx = uplink_rx
        self.uplink_rx_drops = uplink_rx_drops
        self.uplink_rx_filtered = uplink_rx_filtered
        self.uplink_rx_guest_vlan_drops = uplink_rx_guest_vlan_drops
        self.uplink_rx_invalid_encap_drops = uplink_rx_invalid_encap_drops
        self.uplink_rx_mcast_invalid_dr_uplink_drops = uplink_rx_mcast_invalid_dr_uplink_drops
        self.uplink_rx_skip_mac_learn = uplink_rx_skip_mac_learn
        self.uplink_rx_system_err_drops = uplink_rx_system_err_drops
        self.uplink_rx_wrong_dest_drops = uplink_rx_wrong_dest_drops
        self.uplink_tx = uplink_tx
        self.uplink_tx_drops = uplink_tx_drops
        self.uplink_tx_flood_rate_limit = uplink_tx_flood_rate_limit
        self.uplink_tx_ignore = uplink_tx_ignore
        self.uplink_tx_invalid_frame_drops = uplink_tx_invalid_frame_drops
        self.uplink_tx_invalid_state_drops = uplink_tx_invalid_state_drops
        self.uplink_tx_nested_tn_repl_drops = uplink_tx_nested_tn_repl_drops
        self.uplink_tx_non_unicast = uplink_tx_non_unicast
        self.uplink_tx_teaming_drops = uplink_tx_teaming_drops
        self.uplink_tx_ucast_flood = uplink_tx_ucast_flood
        VapiStruct.__init__(self)


Vdl2Counters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vdl2_counters', {
        'arp_proxy_req_fail_drops': type.OptionalType(type.IntegerType()),
        'arp_proxy_req_suppress': type.OptionalType(type.IntegerType()),
        'arp_proxy_resp': type.OptionalType(type.IntegerType()),
        'arp_proxy_resp_drops': type.OptionalType(type.IntegerType()),
        'arp_proxy_resp_filtered': type.OptionalType(type.IntegerType()),
        'arp_proxy_resp_unknown': type.OptionalType(type.IntegerType()),
        'leaf_rx': type.OptionalType(type.IntegerType()),
        'leaf_rx_drops': type.OptionalType(type.IntegerType()),
        'leaf_rx_ref_port_not_found_drops': type.OptionalType(type.IntegerType()),
        'leaf_rx_system_err_drops': type.OptionalType(type.IntegerType()),
        'leaf_tx': type.OptionalType(type.IntegerType()),
        'leaf_tx_drops': type.OptionalType(type.IntegerType()),
        'mac_tbl_lookup_flood': type.OptionalType(type.IntegerType()),
        'mac_tbl_lookup_full': type.OptionalType(type.IntegerType()),
        'mac_tbl_update_full': type.OptionalType(type.IntegerType()),
        'mcast_proxy_rx_drops': type.OptionalType(type.IntegerType()),
        'mcast_proxy_tx_drops': type.OptionalType(type.IntegerType()),
        'nd_proxy_req_fail_drops': type.OptionalType(type.IntegerType()),
        'nd_proxy_req_suppress': type.OptionalType(type.IntegerType()),
        'nd_proxy_resp': type.OptionalType(type.IntegerType()),
        'nd_proxy_resp_drops': type.OptionalType(type.IntegerType()),
        'nd_proxy_resp_filtered': type.OptionalType(type.IntegerType()),
        'nd_proxy_resp_unknown': type.OptionalType(type.IntegerType()),
        'nested_tn_mcast_proxy_diff_vlan_tx_drops': type.OptionalType(type.IntegerType()),
        'nested_tn_mcast_proxy_same_vlan_tx_drops': type.OptionalType(type.IntegerType()),
        'uplink_rx': type.OptionalType(type.IntegerType()),
        'uplink_rx_drops': type.OptionalType(type.IntegerType()),
        'uplink_rx_filtered': type.OptionalType(type.IntegerType()),
        'uplink_rx_guest_vlan_drops': type.OptionalType(type.IntegerType()),
        'uplink_rx_invalid_encap_drops': type.OptionalType(type.IntegerType()),
        'uplink_rx_mcast_invalid_dr_uplink_drops': type.OptionalType(type.IntegerType()),
        'uplink_rx_skip_mac_learn': type.OptionalType(type.IntegerType()),
        'uplink_rx_system_err_drops': type.OptionalType(type.IntegerType()),
        'uplink_rx_wrong_dest_drops': type.OptionalType(type.IntegerType()),
        'uplink_tx': type.OptionalType(type.IntegerType()),
        'uplink_tx_drops': type.OptionalType(type.IntegerType()),
        'uplink_tx_flood_rate_limit': type.OptionalType(type.IntegerType()),
        'uplink_tx_ignore': type.OptionalType(type.IntegerType()),
        'uplink_tx_invalid_frame_drops': type.OptionalType(type.IntegerType()),
        'uplink_tx_invalid_state_drops': type.OptionalType(type.IntegerType()),
        'uplink_tx_nested_tn_repl_drops': type.OptionalType(type.IntegerType()),
        'uplink_tx_non_unicast': type.OptionalType(type.IntegerType()),
        'uplink_tx_teaming_drops': type.OptionalType(type.IntegerType()),
        'uplink_tx_ucast_flood': type.OptionalType(type.IntegerType()),
    },
    Vdl2Counters,
    False,
    None))



class VdrbCounters(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'arp_hold_pkt_drops': 'arp_hold_pkt_drops',
                            'consumed_icmpv4': 'consumed_icmpv4',
                            'consumed_icmpv6': 'consumed_icmpv6',
                            'drop_route_ipv4_drops': 'drop_route_ipv4_drops',
                            'drop_route_ipv6_drops': 'drop_route_ipv6_drops',
                            'no_nbr_ipv4': 'no_nbr_ipv4',
                            'no_nbr_ipv6': 'no_nbr_ipv6',
                            'no_route_ipv4_drops': 'no_route_ipv4_drops',
                            'no_route_ipv6_drops': 'no_route_ipv6_drops',
                            'ns_hold_pkt_drops': 'ns_hold_pkt_drops',
                            'pkt_attr_error_drops': 'pkt_attr_error_drops',
                            'relayed_dhcpv4_req': 'relayed_dhcpv4_req',
                            'relayed_dhcpv4_rsp': 'relayed_dhcpv4_rsp',
                            'relayed_dhcpv6_req': 'relayed_dhcpv6_req',
                            'relayed_dhcpv6_rsp': 'relayed_dhcpv6_rsp',
                            'rpf_ipv4_drops': 'rpf_ipv4_drops',
                            'rpf_ipv6_drops': 'rpf_ipv6_drops',
                            'rx_arp_req': 'rx_arp_req',
                            'rx_ipv4': 'rx_ipv4',
                            'rx_ipv6': 'rx_ipv6',
                            'rx_pkt_parsing_error_drops': 'rx_pkt_parsing_error_drops',
                            'ttl_ipv4_drops': 'ttl_ipv4_drops',
                            'ttl_ipv6_drops': 'ttl_ipv6_drops',
                            'tx_arp_rsp': 'tx_arp_rsp',
                            'tx_dispatch_queue_too_long_drops': 'tx_dispatch_queue_too_long_drops',
                            'tx_ipv4': 'tx_ipv4',
                            'tx_ipv6': 'tx_ipv6',
                            }

    def __init__(self,
                 arp_hold_pkt_drops=None,
                 consumed_icmpv4=None,
                 consumed_icmpv6=None,
                 drop_route_ipv4_drops=None,
                 drop_route_ipv6_drops=None,
                 no_nbr_ipv4=None,
                 no_nbr_ipv6=None,
                 no_route_ipv4_drops=None,
                 no_route_ipv6_drops=None,
                 ns_hold_pkt_drops=None,
                 pkt_attr_error_drops=None,
                 relayed_dhcpv4_req=None,
                 relayed_dhcpv4_rsp=None,
                 relayed_dhcpv6_req=None,
                 relayed_dhcpv6_rsp=None,
                 rpf_ipv4_drops=None,
                 rpf_ipv6_drops=None,
                 rx_arp_req=None,
                 rx_ipv4=None,
                 rx_ipv6=None,
                 rx_pkt_parsing_error_drops=None,
                 ttl_ipv4_drops=None,
                 ttl_ipv6_drops=None,
                 tx_arp_rsp=None,
                 tx_dispatch_queue_too_long_drops=None,
                 tx_ipv4=None,
                 tx_ipv6=None,
                ):
        """
        :type  arp_hold_pkt_drops: :class:`long` or ``None``
        :param arp_hold_pkt_drops: The drops of packet(IPv4) pending on ARP resolution format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  consumed_icmpv4: :class:`long` or ``None``
        :param consumed_icmpv4: ICMP packets(IPv4) destinated to VDR and consumed by VDR format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  consumed_icmpv6: :class:`long` or ``None``
        :param consumed_icmpv6: ICMP packets(IPv6) destinated to VDR and consumed by VDR format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  drop_route_ipv4_drops: :class:`long` or ``None``
        :param drop_route_ipv4_drops: Packet(IPv4) matching drop routes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  drop_route_ipv6_drops: :class:`long` or ``None``
        :param drop_route_ipv6_drops: Packet(IPv6) matching drop routes format: int64
            This 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_nbr_ipv4: :class:`long` or ``None``
        :param no_nbr_ipv4: No IPv4 ARP entry found format: int64
            This 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_nbr_ipv6: :class:`long` or ``None``
        :param no_nbr_ipv6: No IPv6 Neighbor entry found format: int64
            This 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_route_ipv4_drops: :class:`long` or ``None``
        :param no_route_ipv4_drops: No IPv4 routes format: int64
            This 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_route_ipv6_drops: :class:`long` or ``None``
        :param no_route_ipv6_drops: No IPv6 routes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ns_hold_pkt_drops: :class:`long` or ``None``
        :param ns_hold_pkt_drops: The drops of packet(IPv6) pending on neighbor resolution format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pkt_attr_error_drops: :class:`long` or ``None``
        :param pkt_attr_error_drops: Packets which failed attribute operation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relayed_dhcpv4_req: :class:`long` or ``None``
        :param relayed_dhcpv4_req: Relayed DHCPv4 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  relayed_dhcpv4_rsp: :class:`long` or ``None``
        :param relayed_dhcpv4_rsp: Relayed DHCPv4 responses format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relayed_dhcpv6_req: :class:`long` or ``None``
        :param relayed_dhcpv6_req: Relayed DHCPv6 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  relayed_dhcpv6_rsp: :class:`long` or ``None``
        :param relayed_dhcpv6_rsp: Relayed DHCPv6 responses format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rpf_ipv4_drops: :class:`long` or ``None``
        :param rpf_ipv4_drops: Reverse path forwarding drops of packet(IPv4) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rpf_ipv6_drops: :class:`long` or ``None``
        :param rpf_ipv6_drops: Reverse path forwarding drops of packet(IPv6) format: int64
            This 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_arp_req: :class:`long` or ``None``
        :param rx_arp_req: Arp Reqests 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  rx_ipv4: :class:`long` or ``None``
        :param rx_ipv4: Packets(IPv4) received on VDR format: int64
            This 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_ipv6: :class:`long` or ``None``
        :param rx_ipv6: Packets(IPv6) received on VDR format: int64
            This 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_pkt_parsing_error_drops: :class:`long` or ``None``
        :param rx_pkt_parsing_error_drops: Packets failed to be parsed format: int64
            This 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_ipv4_drops: :class:`long` or ``None``
        :param ttl_ipv4_drops: Packet(IPv4) drops due to low TTL format: int64
            This 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_ipv6_drops: :class:`long` or ``None``
        :param ttl_ipv6_drops: Packet(IPv6) drops due to low TTL format: int64
            This 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_arp_rsp: :class:`long` or ``None``
        :param tx_arp_rsp: Arp Responses 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  tx_dispatch_queue_too_long_drops: :class:`long` or ``None``
        :param tx_dispatch_queue_too_long_drops: Packets being tail dropped in the txDispatchQueue format: int64
            This 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_ipv4: :class:`long` or ``None``
        :param tx_ipv4: Packets(IPv4) sent from VDR format: int64
            This 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_ipv6: :class:`long` or ``None``
        :param tx_ipv6: Packets(IPv6) sent from VDR format: int64
            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.arp_hold_pkt_drops = arp_hold_pkt_drops
        self.consumed_icmpv4 = consumed_icmpv4
        self.consumed_icmpv6 = consumed_icmpv6
        self.drop_route_ipv4_drops = drop_route_ipv4_drops
        self.drop_route_ipv6_drops = drop_route_ipv6_drops
        self.no_nbr_ipv4 = no_nbr_ipv4
        self.no_nbr_ipv6 = no_nbr_ipv6
        self.no_route_ipv4_drops = no_route_ipv4_drops
        self.no_route_ipv6_drops = no_route_ipv6_drops
        self.ns_hold_pkt_drops = ns_hold_pkt_drops
        self.pkt_attr_error_drops = pkt_attr_error_drops
        self.relayed_dhcpv4_req = relayed_dhcpv4_req
        self.relayed_dhcpv4_rsp = relayed_dhcpv4_rsp
        self.relayed_dhcpv6_req = relayed_dhcpv6_req
        self.relayed_dhcpv6_rsp = relayed_dhcpv6_rsp
        self.rpf_ipv4_drops = rpf_ipv4_drops
        self.rpf_ipv6_drops = rpf_ipv6_drops
        self.rx_arp_req = rx_arp_req
        self.rx_ipv4 = rx_ipv4
        self.rx_ipv6 = rx_ipv6
        self.rx_pkt_parsing_error_drops = rx_pkt_parsing_error_drops
        self.ttl_ipv4_drops = ttl_ipv4_drops
        self.ttl_ipv6_drops = ttl_ipv6_drops
        self.tx_arp_rsp = tx_arp_rsp
        self.tx_dispatch_queue_too_long_drops = tx_dispatch_queue_too_long_drops
        self.tx_ipv4 = tx_ipv4
        self.tx_ipv6 = tx_ipv6
        VapiStruct.__init__(self)


VdrbCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vdrb_counters', {
        'arp_hold_pkt_drops': type.OptionalType(type.IntegerType()),
        'consumed_icmpv4': type.OptionalType(type.IntegerType()),
        'consumed_icmpv6': type.OptionalType(type.IntegerType()),
        'drop_route_ipv4_drops': type.OptionalType(type.IntegerType()),
        'drop_route_ipv6_drops': type.OptionalType(type.IntegerType()),
        'no_nbr_ipv4': type.OptionalType(type.IntegerType()),
        'no_nbr_ipv6': type.OptionalType(type.IntegerType()),
        'no_route_ipv4_drops': type.OptionalType(type.IntegerType()),
        'no_route_ipv6_drops': type.OptionalType(type.IntegerType()),
        'ns_hold_pkt_drops': type.OptionalType(type.IntegerType()),
        'pkt_attr_error_drops': type.OptionalType(type.IntegerType()),
        'relayed_dhcpv4_req': type.OptionalType(type.IntegerType()),
        'relayed_dhcpv4_rsp': type.OptionalType(type.IntegerType()),
        'relayed_dhcpv6_req': type.OptionalType(type.IntegerType()),
        'relayed_dhcpv6_rsp': type.OptionalType(type.IntegerType()),
        'rpf_ipv4_drops': type.OptionalType(type.IntegerType()),
        'rpf_ipv6_drops': type.OptionalType(type.IntegerType()),
        'rx_arp_req': type.OptionalType(type.IntegerType()),
        'rx_ipv4': type.OptionalType(type.IntegerType()),
        'rx_ipv6': type.OptionalType(type.IntegerType()),
        'rx_pkt_parsing_error_drops': type.OptionalType(type.IntegerType()),
        'ttl_ipv4_drops': type.OptionalType(type.IntegerType()),
        'ttl_ipv6_drops': type.OptionalType(type.IntegerType()),
        'tx_arp_rsp': type.OptionalType(type.IntegerType()),
        'tx_dispatch_queue_too_long_drops': type.OptionalType(type.IntegerType()),
        'tx_ipv4': type.OptionalType(type.IntegerType()),
        'tx_ipv6': type.OptionalType(type.IntegerType()),
    },
    VdrbCounters,
    False,
    None))



class VdsTopology(VapiStruct):
    """
    VDS details where NVDS will be migrated to

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


    """
    VDS_STATUS_APPLYING_TOPOLOGY = "APPLYING_TOPOLOGY"
    """


    """
    VDS_STATUS_APPLY_TOPOLOGY_FAILED = "APPLY_TOPOLOGY_FAILED"
    """


    """
    VDS_STATUS_READY = "READY"
    """


    """
    VDS_STATUS_REMOVING_TOPOLOGY = "REMOVING_TOPOLOGY"
    """


    """



    _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',
                            'cluster_id': 'cluster_id',
                            'data_center_id': 'data_center_id',
                            'status_details': 'status_details',
                            'transport_node_id': 'transport_node_id',
                            'vds_config': 'vds_config',
                            'vds_name': 'vds_name',
                            'vds_status': 'vds_status',
                            'vmknic': 'vmknic',
                            }

    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,
                 cluster_id=None,
                 data_center_id=None,
                 status_details=None,
                 transport_node_id=None,
                 vds_config=None,
                 vds_name=None,
                 vds_status=None,
                 vmknic=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  cluster_id: :class:`str` or ``None``
        :param cluster_id: Identifier of cluster where VDS will be created
        :type  data_center_id: :class:`str` or ``None``
        :param data_center_id: Identifier of datacenter where VDS will be created
        :type  status_details: :class:`list` of :class:`str` or ``None``
        :param status_details: Details of the VDS configuration 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  transport_node_id: :class:`list` of :class:`str` or ``None``
        :param transport_node_id: Transport node identifiers on which NVDS(s) being upgraded to VDS
        :type  vds_config: :class:`DVSConfig` or ``None``
        :param vds_config: 
        :type  vds_name: :class:`str` or ``None``
        :param vds_name: VDS name that will be created under above datacenter
        :type  vds_status: :class:`str` or ``None``
        :param vds_status: Possible values are: 
            
            * :attr:`VdsTopology.VDS_STATUS_PENDING_TOPOLOGY`
            * :attr:`VdsTopology.VDS_STATUS_APPLYING_TOPOLOGY`
            * :attr:`VdsTopology.VDS_STATUS_APPLY_TOPOLOGY_FAILED`
            * :attr:`VdsTopology.VDS_STATUS_READY`
            * :attr:`VdsTopology.VDS_STATUS_REMOVING_TOPOLOGY`
            
            Status of the VDS 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  vmknic: :class:`list` of :class:`str` or ``None``
        :param vmknic: Virtual network interfaces that will be moved from VLAN Logical
            switch to Distributed Virtual PortGroup
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.cluster_id = cluster_id
        self.data_center_id = data_center_id
        self.status_details = status_details
        self.transport_node_id = transport_node_id
        self.vds_config = vds_config
        self.vds_name = vds_name
        self.vds_status = vds_status
        self.vmknic = vmknic
        VapiStruct.__init__(self)


VdsTopology._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vds_topology', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'cluster_id': type.OptionalType(type.StringType()),
        'data_center_id': type.OptionalType(type.StringType()),
        'status_details': type.OptionalType(type.ListType(type.StringType())),
        'transport_node_id': type.OptionalType(type.ListType(type.StringType())),
        'vds_config': type.OptionalType(type.ReferenceType(__name__, 'DVSConfig')),
        'vds_name': type.OptionalType(type.StringType()),
        'vds_status': type.OptionalType(type.StringType()),
        'vmknic': type.OptionalType(type.ListType(type.StringType())),
    },
    VdsTopology,
    False,
    None))



class VdsUplink(VapiStruct):
    """
    If Virtual Distributed Switch is used as a HostSwitch to configure
    TransportNode or TransportNodeProfie, this mapping should be specified. You
    can either use vds_uplink_name or vds_lag_name to associate with
    uplink_name from UplinkHostSwitch profile.

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



    _canonical_to_pep_names = {
                            'uplink_name': 'uplink_name',
                            'vds_lag_name': 'vds_lag_name',
                            'vds_uplink_name': 'vds_uplink_name',
                            }

    def __init__(self,
                 uplink_name=None,
                 vds_lag_name=None,
                 vds_uplink_name=None,
                ):
        """
        :type  uplink_name: :class:`str` or ``None``
        :param uplink_name: This name is from UplinkHostSwitch profile that is associated with
            the HostSwitch specified in TransportNode or TransportNodeProfile
            configuration. This name will be used as an alias to either VDS
            uplink or lag in other configuration.
        :type  vds_lag_name: :class:`str` or ``None``
        :param vds_lag_name: LAG name that is connected to Physical NIC on a host from vSphere.
        :type  vds_uplink_name: :class:`str` or ``None``
        :param vds_uplink_name: Uplink name of VDS that is connected to Physical NIC on a host from
            vSphere.
        """
        self.uplink_name = uplink_name
        self.vds_lag_name = vds_lag_name
        self.vds_uplink_name = vds_uplink_name
        VapiStruct.__init__(self)


VdsUplink._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vds_uplink', {
        'uplink_name': type.OptionalType(type.StringType()),
        'vds_lag_name': type.OptionalType(type.StringType()),
        'vds_uplink_name': type.OptionalType(type.StringType()),
    },
    VdsUplink,
    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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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 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_: 
        :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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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.
    """
    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"
    """


    """
    TYPE_MP = "MP"
    """


    """
    TYPE_INTELLIGENCE = "INTELLIGENCE"
    """


    """
    TYPE_VC_SYSTEM = "VC_SYSTEM"
    """


    """
    TYPE_UNKNOWN = "UNKNOWN"
    """


    """



    _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',
                            'scope': 'scope',
                            'tags': 'tags',
                            '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',
                            'runtime_info': 'runtime_info',
                            'source': 'source',
                            'type': 'type',
                            'uptv2_enabled': 'uptv2_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type=None,
                 scope=None,
                 tags=None,
                 compute_ids=None,
                 external_id=None,
                 guest_info=None,
                 host_id=None,
                 local_id_on_host=None,
                 power_state=None,
                 runtime_info=None,
                 source=None,
                 type=None,
                 uptv2_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_: 
        :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` or ``None``
        :param resource_type: The type of this resource.
        :type  scope: :class:`list` of :class:`DiscoveredResourceScope` or ``None``
        :param scope: Specifies list of scope of discovered resource. e.g. if VHC path is
            associated with principal identity, who owns the discovered
            resource, then scope id will be VHC path and scope type will be
            VHC.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :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: 
        :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  runtime_info: :class:`VirtualMachineRuntimeInfo` or ``None``
        :param runtime_info: 
        :type  source: :class:`ResourceReference` or ``None``
        :param source: 
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`VirtualMachine.TYPE_EDGE`
            * :attr:`VirtualMachine.TYPE_SERVICE`
            * :attr:`VirtualMachine.TYPE_REGULAR`
            * :attr:`VirtualMachine.TYPE_MP`
            * :attr:`VirtualMachine.TYPE_INTELLIGENCE`
            * :attr:`VirtualMachine.TYPE_VC_SYSTEM`
            * :attr:`VirtualMachine.TYPE_UNKNOWN`
            
            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  uptv2_enabled: :class:`bool` or ``None``
        :param uptv2_enabled: If UPT enabled is true for any virtual network interface of the
            virtual machine, then this property is true for the virtual
            machine.
            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.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self.resource_type = resource_type
        self.scope = scope
        self.tags = tags
        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.runtime_info = runtime_info
        self.source = source
        self.type = type
        self.uptv2_enabled = uptv2_enabled
        VapiStruct.__init__(self)


VirtualMachine._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_machine', {
        '_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.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DiscoveredResourceScope'))),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        '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()),
        'runtime_info': type.OptionalType(type.ReferenceType(__name__, 'VirtualMachineRuntimeInfo')),
        'source': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'type': type.OptionalType(type.StringType()),
        'uptv2_enabled': type.OptionalType(type.BooleanType()),
    },
    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_: 
        :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_: 
        :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 VirtualMachineRuntimeInfo(VapiStruct):
    """
    Specifies details of runtime for a virtual machine

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



    _canonical_to_pep_names = {
                            'vif_runtime_info': 'vif_runtime_info',
                            }

    def __init__(self,
                 vif_runtime_info=None,
                ):
        """
        :type  vif_runtime_info: :class:`list` of :class:`VirtualNetworkInterfaceRuntimeInfo` or ``None``
        :param vif_runtime_info: Specifies list of runtime details of virtual network interfaces of
            virtual machine.
        """
        self.vif_runtime_info = vif_runtime_info
        VapiStruct.__init__(self)


VirtualMachineRuntimeInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_machine_runtime_info', {
        'vif_runtime_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VirtualNetworkInterfaceRuntimeInfo'))),
    },
    VirtualMachineRuntimeInfo,
    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.
    """
    OWNER_VM_TYPE_EDGE = "EDGE"
    """


    """
    OWNER_VM_TYPE_SERVICE = "SERVICE"
    """


    """
    OWNER_VM_TYPE_REGULAR = "REGULAR"
    """


    """



    _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',
                            'scope': 'scope',
                            'tags': 'tags',
                            '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',
                            'uptv2_enabled': 'uptv2_enabled',
                            'vm_local_id_on_host': 'vm_local_id_on_host',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type=None,
                 scope=None,
                 tags=None,
                 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,
                 uptv2_enabled=None,
                 vm_local_id_on_host=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: 
        :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` or ``None``
        :param resource_type: The type of this resource.
        :type  scope: :class:`list` of :class:`DiscoveredResourceScope` or ``None``
        :param scope: Specifies list of scope of discovered resource. e.g. if VHC path is
            associated with principal identity, who owns the discovered
            resource, then scope id will be VHC path and scope type will be
            VHC.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :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  uptv2_enabled: :class:`bool` or ``None``
        :param uptv2_enabled: Specifies if UPTv2 (Universal Pass-through version 2) compatibility
            is enabled for the virtual network interface 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  vm_local_id_on_host: :class:`str` or ``None``
        :param vm_local_id_on_host: Id of the vm unique within the 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.scope = scope
        self.tags = tags
        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.uptv2_enabled = uptv2_enabled
        self.vm_local_id_on_host = vm_local_id_on_host
        VapiStruct.__init__(self)


VirtualNetworkInterface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_network_interface', {
        '_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.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DiscoveredResourceScope'))),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        '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()),
        'uptv2_enabled': type.OptionalType(type.BooleanType()),
        'vm_local_id_on_host': type.OptionalType(type.StringType()),
    },
    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_: 
        :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 VirtualNetworkInterfaceRuntimeInfo(VapiStruct):
    """
    Runtime details of virtual network interface of virtual machine.

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


    """



    _canonical_to_pep_names = {
                            'external_id': 'external_id',
                            'uptv2_active': 'uptv2_active',
                            }

    def __init__(self,
                 external_id=None,
                 uptv2_active=None,
                ):
        """
        :type  external_id: :class:`str` or ``None``
        :param external_id: External Id of virtual network inferface
        :type  uptv2_active: :class:`str` or ``None``
        :param uptv2_active: Possible values are: 
            
            * :attr:`VirtualNetworkInterfaceRuntimeInfo.UPTV2ACTIVE_NONE`
            
            This flag specifies whether UPTv2 (Universal Pass-through version
            2) is active on the virtual network interface or not. If TRUE, then
            the virtual network interface works in the pass-through mode. If
            FALSE, then the virtual network interface still has network
            connectivity but works in emulated mode and pass-through is not
            enabled. This flag is NONE, if it is not applicable.
        """
        self.external_id = external_id
        self.uptv2_active = uptv2_active
        VapiStruct.__init__(self)


VirtualNetworkInterfaceRuntimeInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_network_interface_runtime_info', {
        'external_id': type.OptionalType(type.StringType()),
        'uptv2_active': type.OptionalType(type.StringType()),
    },
    VirtualNetworkInterfaceRuntimeInfo,
    False,
    None))



class VlanVniRangePair(VapiStruct):
    """
    Vlan-Vni mapping pair resource in EvpnTenantConfig for ROUTE-SERVER Evpn
    mode

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



    _canonical_to_pep_names = {
                            'vlans': 'vlans',
                            'vnis': 'vnis',
                            }

    def __init__(self,
                 vlans=None,
                 vnis=None,
                ):
        """
        :type  vlans: :class:`str` or ``None``
        :param vlans: List of VLAN ids and VLAN ranges (specified with '-').
        :type  vnis: :class:`str` or ``None``
        :param vnis: List of VNI ids and VNI ranges (specified with '-'). The vni id is
            used for VXLAN transmission for a given tenant Vlan ID in
            ROUTE-SERVER Evpn.
        """
        self.vlans = vlans
        self.vnis = vnis
        VapiStruct.__init__(self)


VlanVniRangePair._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vlan_vni_range_pair', {
        'vlans': type.OptionalType(type.StringType()),
        'vnis': type.OptionalType(type.StringType()),
    },
    VlanVniRangePair,
    False,
    None))



class VmknicNetwork(VapiStruct):
    """
    Mapping of all vmk interfaces to destination networks

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



    _canonical_to_pep_names = {
                            'destination_network': 'destination_network',
                            'device_name': 'device_name',
                            }

    def __init__(self,
                 destination_network=None,
                 device_name=None,
                ):
        """
        :type  destination_network: :class:`str` or ``None``
        :param destination_network: When migrating vmks to N-VDS/logical switches, the id is the
            logical switch id. When migrating out of N-VDS/logical switches,
            the id is the vSphere Switch portgroup name in a single vSphere
            Standard Switch (VSS), or distributed virtual portgroup name in a
            single distributed virtual switch (DVS).
        :type  device_name: :class:`str` or ``None``
        :param device_name: The vmk interface name, e.g., vmk0, vmk1; the id assigned by
            vCenter.
        """
        self.destination_network = destination_network
        self.device_name = device_name
        VapiStruct.__init__(self)


VmknicNetwork._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vmknic_network', {
        'destination_network': type.OptionalType(type.StringType()),
        'device_name': type.OptionalType(type.StringType()),
    },
    VmknicNetwork,
    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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_: 
        :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 Vpc(VapiStruct):
    """
    'Vpc' provides self-service and allows the application users to configure
    subnets and other services.

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


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'default_gateway_path': 'default_gateway_path',
                            'dhcp_config': 'dhcp_config',
                            'external_ipv4_blocks': 'external_ipv4_blocks',
                            'ip_address_type': 'ip_address_type',
                            'ipv6_profile_paths': 'ipv6_profile_paths',
                            'load_balancer_vpc_endpoint': 'load_balancer_vpc_endpoint',
                            'private_ipv4_blocks': 'private_ipv4_blocks',
                            'service_gateway': 'service_gateway',
                            'short_id': 'short_id',
                            'site_infos': 'site_infos',
                            'subnet_profiles': 'subnet_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 default_gateway_path=None,
                 dhcp_config=None,
                 external_ipv4_blocks=None,
                 ip_address_type=None,
                 ipv6_profile_paths=None,
                 load_balancer_vpc_endpoint=None,
                 private_ipv4_blocks=None,
                 service_gateway=None,
                 short_id=None,
                 site_infos=None,
                 subnet_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_gateway_path: :class:`str` or ``None``
        :param default_gateway_path: This represents the path of a Tier0 or Tier0 VRF or label. This
            must be a subset of Tier0s/VRFs defined at the project level. It
            serves as default gateway for VPC. In case of Label, it should have
            reference of Tier0 or Tier0 VRF path.
        :type  dhcp_config: :class:`DhcpConfig` or ``None``
        :param dhcp_config: 
        :type  external_ipv4_blocks: :class:`list` of :class:`str` or ``None``
        :param external_ipv4_blocks: IP block used for allocating CIDR blocks for public subnets. IP
            block must be subset of Project IPv4 blocks.
        :type  ip_address_type: :class:`str` or ``None``
        :param ip_address_type: Possible values are: 
            
            * :attr:`Vpc.IP_ADDRESS_TYPE_IPV4`
            
            This defines the IP address type that will be allocated for
            subnets. In the case of IPv4, all the subnets will be allocated IP
            addresses from the IpV4 private/external pool.
        :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. If not specified, default
            profiles will be applied.
        :type  load_balancer_vpc_endpoint: :class:`LoadBalancerVPCEndpoint` or ``None``
        :param load_balancer_vpc_endpoint: 
        :type  private_ipv4_blocks: :class:`list` of :class:`str` or ``None``
        :param private_ipv4_blocks: IP block used for allocating CIDR blocks for private subnets. IP
            block must be defined by the Project admin.
        :type  service_gateway: :class:`ServiceGateway` or ``None``
        :param service_gateway: 
        :type  short_id: :class:`str` or ``None``
        :param short_id: Defaults to id if id is less than equal to 8 characters or defaults
            to random generated id if not set.
        :type  site_infos: :class:`list` of :class:`SiteInfo` or ``None``
        :param site_infos: Information related to sites applicable for given VPC. The edge
            cluster path must belong to the same site. This will be a subset of
            the span of connected Tier0/VRF. Only 1 Edge cluster can be
            configured in site_infos.
        :type  subnet_profiles: :class:`SubnetProfiles` or ``None``
        :param subnet_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.default_gateway_path = default_gateway_path
        self.dhcp_config = dhcp_config
        self.external_ipv4_blocks = external_ipv4_blocks
        self.ip_address_type = ip_address_type
        self.ipv6_profile_paths = ipv6_profile_paths
        self.load_balancer_vpc_endpoint = load_balancer_vpc_endpoint
        self.private_ipv4_blocks = private_ipv4_blocks
        self.service_gateway = service_gateway
        self.short_id = short_id
        self.site_infos = site_infos
        self.subnet_profiles = subnet_profiles
        VapiStruct.__init__(self)


Vpc._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_gateway_path': type.OptionalType(type.StringType()),
        'dhcp_config': type.OptionalType(type.ReferenceType(__name__, 'DhcpConfig')),
        'external_ipv4_blocks': type.OptionalType(type.ListType(type.StringType())),
        'ip_address_type': type.OptionalType(type.StringType()),
        'ipv6_profile_paths': type.OptionalType(type.ListType(type.StringType())),
        'load_balancer_vpc_endpoint': type.OptionalType(type.ReferenceType(__name__, 'LoadBalancerVPCEndpoint')),
        'private_ipv4_blocks': type.OptionalType(type.ListType(type.StringType())),
        'service_gateway': type.OptionalType(type.ReferenceType(__name__, 'ServiceGateway')),
        'short_id': type.OptionalType(type.StringType()),
        'site_infos': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteInfo'))),
        'subnet_profiles': type.OptionalType(type.ReferenceType(__name__, 'SubnetProfiles')),
    },
    Vpc,
    False,
    None))



class VpcIpAddressAllocation(VapiStruct):
    """
    Allocation parameters for the IP address (e.g. specific IP address) can be
    specified.

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


    """
    IP_ADDRESS_BLOCK_VISIBILITY_PRIVATE = "PRIVATE"
    """


    """
    IP_ADDRESS_TYPE_IPV4 = "IPV4"
    """


    """
    IP_ADDRESS_TYPE_IPV6 = "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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'allocation_ip': 'allocation_ip',
                            'ip_address_block_visibility': 'ip_address_block_visibility',
                            'ip_address_type': 'ip_address_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 allocation_ip=None,
                 ip_address_block_visibility=None,
                 ip_address_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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: Single IP Address that is allocated from external ip block or IPv6
            block based on IP address type. If not specified, any available IP
            will be allocated from respective IP block. If specified, it has to
            be within range of respective IP blocks. If IP is already in use
            then validation error will be thrown. format: ip
        :type  ip_address_block_visibility: :class:`str` or ``None``
        :param ip_address_block_visibility: Possible values are: 
            
            *
              :attr:`VpcIpAddressAllocation.IP_ADDRESS_BLOCK_VISIBILITY_EXTERNAL`
            *
              :attr:`VpcIpAddressAllocation.IP_ADDRESS_BLOCK_VISIBILITY_PRIVATE`
            
            Represents visibility of IP address block. This field is not
            applicable if IPAddressType at VPC is IPv6.
        :type  ip_address_type: :class:`str` or ``None``
        :param ip_address_type: Possible values are: 
            
            * :attr:`VpcIpAddressAllocation.IP_ADDRESS_TYPE_IPV4`
            * :attr:`VpcIpAddressAllocation.IP_ADDRESS_TYPE_IPV6`
            
            This defines the type of IP address block that will be used to
            allocate IP. This field is applicable only if IP addressType at VPC
            is DUAL. In case of IPv4, external blocks will be used, and in case
            of IPv6, IPv6 blocks will be used.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.allocation_ip = allocation_ip
        self.ip_address_block_visibility = ip_address_block_visibility
        self.ip_address_type = ip_address_type
        VapiStruct.__init__(self)


VpcIpAddressAllocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'ip_address_block_visibility': type.OptionalType(type.StringType()),
        'ip_address_type': type.OptionalType(type.StringType()),
    },
    VpcIpAddressAllocation,
    False,
    None))



class VpcIpAddressAllocationListResult(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_: 
        :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:`VpcIpAddressAllocation` or ``None``
        :param results: List of VpcIpAddressAllocations
        """
        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)


VpcIpAddressAllocationListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_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__, 'VpcIpAddressAllocation'))),
    },
    VpcIpAddressAllocationListResult,
    False,
    None))



class VpcListResult(VapiStruct):
    """
    Paged Collection of VPC

    .. 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_: 
        :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:`Vpc` or ``None``
        :param results: VPC 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)


VpcListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_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__, 'Vpc'))),
    },
    VpcListResult,
    False,
    None))



class VpcSubnet(VapiStruct):
    """
    VPC Subnet provides self-service and allows the application users to create
    networks within the VPC and attach workloads to them.

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


    """
    ACCESS_MODE_PUBLIC = "Public"
    """


    """
    ACCESS_MODE_ISOLATED = "Isolated"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_mode': 'access_mode',
                            'advanced_config': 'advanced_config',
                            'dhcp_config': 'dhcp_config',
                            'ip_addresses': 'ip_addresses',
                            'ipv4_subnet_size': 'ipv4_subnet_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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_mode=None,
                 advanced_config=None,
                 dhcp_config=None,
                 ip_addresses=None,
                 ipv4_subnet_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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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_mode: :class:`str` or ``None``
        :param access_mode: Possible values are: 
            
            * :attr:`VpcSubnet.ACCESS_MODE_PRIVATE`
            * :attr:`VpcSubnet.ACCESS_MODE_PUBLIC`
            * :attr:`VpcSubnet.ACCESS_MODE_ISOLATED`
            
            There are three kinds of Access Types supported for an Application.
            Private - VPC Subnet is accessible only within the application and
            its IPs are allocated from private IP address pool from VPC
            configuration unless specified explicitly by user. Public - VPC
            Subnet is accessible from external networks and its IPs are
            allocated from public IP address pool from VPC configuration unless
            specified explicitly by user. Isolated - VPC Subnet is not
            accessible from other VPC Subnets within the same VPC.
        :type  advanced_config: :class:`SubnetAdvancedConfig` or ``None``
        :param advanced_config: 
        :type  dhcp_config: :class:`VpcSubnetDhcpConfig` or ``None``
        :param dhcp_config: 
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: If not provided, Ip assignment will be done based on VPC CIDRs This
            represents the VPC Subnet that is associated with tier. If IPv4
            CIDR is given, ipv4_subnet_size property is ignored. For IPv6 CIDR,
            supported prefix length is /64. format: ip-cidr-block
        :type  ipv4_subnet_size: :class:`long` or ``None``
        :param ipv4_subnet_size: If IP Addresses are not provided, this field will be used to carve
            out the ips from respective ip block defined in the parent VPC. The
            default is 64. If ip_addresses field is provided then
            ipv4_subnet_size field is ignored. This field cannot be modified
            after creating a VPC Subnet. 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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_mode = access_mode
        self.advanced_config = advanced_config
        self.dhcp_config = dhcp_config
        self.ip_addresses = ip_addresses
        self.ipv4_subnet_size = ipv4_subnet_size
        VapiStruct.__init__(self)


VpcSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_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.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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_mode': type.OptionalType(type.StringType()),
        'advanced_config': type.OptionalType(type.ReferenceType(__name__, 'SubnetAdvancedConfig')),
        'dhcp_config': type.OptionalType(type.ReferenceType(__name__, 'VpcSubnetDhcpConfig')),
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'ipv4_subnet_size': type.OptionalType(type.IntegerType()),
    },
    VpcSubnet,
    False,
    None))



class VpcSubnetDhcpConfig(VapiStruct):
    """
    VPC Subnet DHCP config

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



    _canonical_to_pep_names = {
                            'dhcp_relay_config_path': 'dhcp_relay_config_path',
                            'dns_client_config': 'dns_client_config',
                            'enable_dhcp': 'enable_dhcp',
                            'static_pool_config': 'static_pool_config',
                            }

    def __init__(self,
                 dhcp_relay_config_path=None,
                 dns_client_config=None,
                 enable_dhcp=None,
                 static_pool_config=None,
                ):
        """
        :type  dhcp_relay_config_path: :class:`str` or ``None``
        :param dhcp_relay_config_path: Policy path of DHCP-relay-config. If configured then all the
            subnets will be configured with the DHCP relay server. If not
            specified, then the local DHCP server will be configured for all
            connected subnets.
        :type  dns_client_config: :class:`DnsClientConfig` or ``None``
        :param dns_client_config: 
        :type  enable_dhcp: :class:`bool` or ``None``
        :param enable_dhcp: If activated, the DHCP server will be configured based on IP
            address type. If deactivated then neither DHCP server nor relay
            shall be configured.
        :type  static_pool_config: :class:`StaticPoolConfig` or ``None``
        :param static_pool_config: 
        """
        self.dhcp_relay_config_path = dhcp_relay_config_path
        self.dns_client_config = dns_client_config
        self.enable_dhcp = enable_dhcp
        self.static_pool_config = static_pool_config
        VapiStruct.__init__(self)


VpcSubnetDhcpConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_subnet_dhcp_config', {
        'dhcp_relay_config_path': type.OptionalType(type.StringType()),
        'dns_client_config': type.OptionalType(type.ReferenceType(__name__, 'DnsClientConfig')),
        'enable_dhcp': type.OptionalType(type.BooleanType()),
        'static_pool_config': type.OptionalType(type.ReferenceType(__name__, 'StaticPoolConfig')),
    },
    VpcSubnetDhcpConfig,
    False,
    None))



class VpcSubnetListResult(VapiStruct):
    """
    Paged Collection of VPC Subnet

    .. 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_: 
        :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:`VpcSubnet` or ``None``
        :param results: VPC Subnet 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)


VpcSubnetListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_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.ReferenceType(__name__, 'VpcSubnet'))),
    },
    VpcSubnetListResult,
    False,
    None))



class VpcSubnetPort(VapiStruct):
    """
    VPC Subnet port will create LogicalPort on LogicalSwitch corresponding to
    the Subnet. 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_UNBLOCKED_VLAN = "UNBLOCKED_VLAN"
    """


    """
    INIT_STATE_RESTORE_VIF = "RESTORE_VIF"
    """


    """



    _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',
                            'origin_site_id': 'origin_site_id',
                            'owner_id': 'owner_id',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'realization_id': 'realization_id',
                            'relative_path': 'relative_path',
                            'remote_path': 'remote_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',
                            'origin_id': 'origin_id',
                            '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,
                 origin_site_id=None,
                 owner_id=None,
                 parent_path=None,
                 path=None,
                 realization_id=None,
                 relative_path=None,
                 remote_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,
                 origin_id=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: 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  origin_site_id: :class:`str` or ``None``
        :param origin_site_id: This is a UUID generated by the system for knowing which site owns
            an object. This is used in 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  owner_id: :class:`str` or ``None``
        :param owner_id: This is a UUID generated by the system for knowing who owns this
            object. This is used in 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  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  realization_id: :class:`str` or ``None``
        :param realization_id: This is a UUID generated by the system for realizing the entity
            object. In most cases this should be same as 'unique_id' of the
            entity. However, in some cases this can be different because of
            entities have migrated their unique identifier to NSX Policy intent
            objects later in the timeline and did not use unique_id for
            realization. Realization id is helpful for users to debug data path
            to correlate the configuration with corresponding intent.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This 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_path: :class:`str` or ``None``
        :param remote_path: This is the path of the object on the local managers when queried
            on the NSX+ service, and path of the object on NSX+ service when
            queried from the local 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  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entities
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This 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. Note that this type is applicable to be used in
            Hierarchical API only.
            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:`VpcSubnetPort.ADMIN_STATE_UP`
            * :attr:`VpcSubnetPort.ADMIN_STATE_DOWN`
            
            Represents desired state of the segment port
        :type  attachment: :class:`PortAttachment` or ``None``
        :param attachment: 
        :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:`VpcSubnetPort.INIT_STATE_UNBLOCKED_VLAN`
            * :attr:`VpcSubnetPort.INIT_STATE_RESTORE_VIF`
            
            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. 'RESTORE_VIF' fetches and restores VIF
            attachment from ESX host.
        :type  origin_id: :class:`str` or ``None``
        :param origin_id: ID populated by NSX when NSX on DVPG is used to indicate the source
            Distributed Virtual Port and the corresponding Distributed Virtual
            Switch. This ID is populated only for ports attached to discovered
            segments.
            This 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_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.origin_site_id = origin_site_id
        self.owner_id = owner_id
        self.parent_path = parent_path
        self.path = path
        self.realization_id = realization_id
        self.relative_path = relative_path
        self.remote_path = remote_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.origin_id = origin_id
        self.source_site_id = source_site_id
        VapiStruct.__init__(self)


VpcSubnetPort._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_subnet_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'))),
        'origin_site_id': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'realization_id': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'remote_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()),
        'origin_id': type.OptionalType(type.StringType()),
        'source_site_id': type.OptionalType(type.StringType()),
    },
    VpcSubnetPort,
    False,
    None))



class VpcSubnetPortListResult(VapiStruct):
    """
    List VPC Subnet Port 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_: 
        :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)


VpcSubnetPortListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_subnet_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'))),
    },
    VpcSubnetPortListResult,
    False,
    None))



class VpcSubnetStatus(VapiStruct):
    """
    Realized state of the VPC Subnet, this will show user information related
    to ip pool, dhcp etc.

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


    """
    IP_ADDRESS_TYPE_IPV6 = "IPV6"
    """


    """



    _canonical_to_pep_names = {
                            'dhcp_ranges': 'dhcp_ranges',
                            'dhcp_server_address': 'dhcp_server_address',
                            'gateway_address': 'gateway_address',
                            'ip_address_type': 'ip_address_type',
                            'network_address': 'network_address',
                            'static_ip_pool_path': 'static_ip_pool_path',
                            'static_ip_pool_range': 'static_ip_pool_range',
                            }

    def __init__(self,
                 dhcp_ranges=None,
                 dhcp_server_address=None,
                 gateway_address=None,
                 ip_address_type=None,
                 network_address=None,
                 static_ip_pool_path=None,
                 static_ip_pool_range=None,
                ):
        """
        :type  dhcp_ranges: :class:`str` or ``None``
        :param dhcp_ranges: DHCP address ranges are used for dynamic IP allocation. Existing
            values cannot be deleted or modified
        :type  dhcp_server_address: :class:`str` or ``None``
        :param dhcp_server_address: Dhcp server IP address.
        :type  gateway_address: :class:`str` or ``None``
        :param gateway_address: Gateway address of the VPC Subnet
        :type  ip_address_type: :class:`str` or ``None``
        :param ip_address_type: Possible values are: 
            
            * :attr:`VpcSubnetStatus.IP_ADDRESS_TYPE_IPV4`
            * :attr:`VpcSubnetStatus.IP_ADDRESS_TYPE_IPV6`
            
            This defines the IP address type that will be allocated for VPC
            Subnets.
        :type  network_address: :class:`str` or ``None``
        :param network_address: Network address of the VPC Subnet
        :type  static_ip_pool_path: :class:`str` or ``None``
        :param static_ip_pool_path: Static IP Pool used to allocate IPs. For ex, for DHCP static
            binding, LB VIP etc. This will also have pool usage inforamation.
        :type  static_ip_pool_range: :class:`str` or ``None``
        :param static_ip_pool_range: Static IP address ranges used for IP allocation.
        """
        self.dhcp_ranges = dhcp_ranges
        self.dhcp_server_address = dhcp_server_address
        self.gateway_address = gateway_address
        self.ip_address_type = ip_address_type
        self.network_address = network_address
        self.static_ip_pool_path = static_ip_pool_path
        self.static_ip_pool_range = static_ip_pool_range
        VapiStruct.__init__(self)


VpcSubnetStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_subnet_status', {
        'dhcp_ranges': type.OptionalType(type.StringType()),
        'dhcp_server_address': type.OptionalType(type.StringType()),
        'gateway_address': type.OptionalType(type.StringType()),
        'ip_address_type': type.OptionalType(type.StringType()),
        'network_address': type.OptionalType(type.StringType()),
        'static_ip_pool_path': type.OptionalType(type.StringType()),
        'static_ip_pool_range': type.OptionalType(type.StringType()),
    },
    VpcSubnetStatus,
    False,
    None))



class VpcSubnetStatusListResult(VapiStruct):
    """
    Paged Collection of VPC Subnet Status

    .. 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_: 
        :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:`VpcSubnetStatus` or ``None``
        :param results: VPC Subnet 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)


VpcSubnetStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vpc_subnet_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__, 'VpcSubnetStatus'))),
    },
    VpcSubnetStatusListResult,
    False,
    None))



class VrfEvpnL2VniConfig(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'enable_vtep_groups': 'enable_vtep_groups',
                            'l2_vni_configs': 'l2_vni_configs',
                            }

    def __init__(self,
                 enable_vtep_groups=None,
                 l2_vni_configs=None,
                ):
        """
        :type  enable_vtep_groups: :class:`bool` or ``None``
        :param enable_vtep_groups: This is used to enable or disable the creation of vtep groups. Each
            vtep group is used to group vteps with the same MAC for L2 ECMP
            usage.
        :type  l2_vni_configs: :class:`list` of :class:`VrfL2VniConfig` or ``None``
        :param l2_vni_configs: Define L2 VNI and its related route distinguiser and route targets.
        """
        self.enable_vtep_groups = enable_vtep_groups
        self.l2_vni_configs = l2_vni_configs
        VapiStruct.__init__(self)


VrfEvpnL2VniConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vrf_evpn_l2_vni_config', {
        'enable_vtep_groups': type.OptionalType(type.BooleanType()),
        'l2_vni_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VrfL2VniConfig'))),
    },
    VrfEvpnL2VniConfig,
    False,
    None))



class VrfL2VniConfig(VapiStruct):
    """


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



    _canonical_to_pep_names = {
                            'l2_vni': 'l2_vni',
                            'route_distinguisher': 'route_distinguisher',
                            'route_targets': 'route_targets',
                            }

    def __init__(self,
                 l2_vni=None,
                 route_distinguisher=None,
                 route_targets=None,
                ):
        """
        :type  l2_vni: :class:`long` or ``None``
        :param l2_vni: L2 VNI associated with the VRF. It must be unique and available
            from the VNI pool defined for EVPN service. 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.
        """
        self.l2_vni = l2_vni
        self.route_distinguisher = route_distinguisher
        self.route_targets = route_targets
        VapiStruct.__init__(self)


VrfL2VniConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vrf_l2_vni_config', {
        'l2_vni': type.OptionalType(type.IntegerType()),
        'route_distinguisher': type.OptionalType(type.StringType()),
        'route_targets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VrfRouteTargets'))),
    },
    VrfL2VniConfig,
    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 = {
                            'address_family': 'address_family',
                            'export_route_targets': 'export_route_targets',
                            'import_route_targets': 'import_route_targets',
                            }

    def __init__(self,
                 address_family=None,
                 export_route_targets=None,
                 import_route_targets=None,
                ):
        """
        :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.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', {
        '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 VrniGlobalCollector(VapiStruct):
    """
    vRNI collector collects the system metrics to Vmware vRNI (vRealize Network
    Insight) platform for network monitoring and analytics.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "VrniGlobalCollector"
    """
    Identifier denoting this class, when it is used 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 = {
                            'report_interval': 'report_interval',
                            'collector_ip': 'collector_ip',
                            'collector_port': 'collector_port',
                            'collector_type': 'collector_type',
                            }

    def __init__(self,
                 report_interval=None,
                 collector_ip=None,
                 collector_port=None,
                 collector_type='VrniGlobalCollector',
                ):
        """
        :type  report_interval: :class:`long` or ``None``
        :param report_interval: Report interval for operation data in seconds. format: int32
        :type  collector_ip: :class:`str` or ``None``
        :param collector_ip: IP address for the global collector. format: ip
        :type  collector_port: :class:`long` or ``None``
        :param collector_port: Port for the global collector. format: int32
        :type  collector_type: :class:`str`
        :param collector_type: Possible values are: 
            
            * :attr:`GlobalCollectorConfig.COLLECTOR_TYPE_VRNI`
            * :attr:`GlobalCollectorConfig.COLLECTOR_TYPE_WAVE_FRONT`
            
            Specify the global collector type.
        """
        self.report_interval = report_interval
        self.collector_ip = collector_ip
        self.collector_port = collector_port
        self._collector_type = collector_type
        VapiStruct.__init__(self)

    @property
    def collector_type(self):
        """
        Return the discriminator value
        """
        return self._collector_type

VrniGlobalCollector._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vrni_global_collector', {
        'report_interval': type.OptionalType(type.IntegerType()),
        'collector_ip': type.OptionalType(type.StringType()),
        'collector_port': type.OptionalType(type.IntegerType()),
        'collector_type': type.StringType(),
    },
    VrniGlobalCollector,
    False,
    None))



class WaveFrontGlobalCollector(VapiStruct):
    """
    Wavefront collector is defined to export the real-time metrics to Vmware
    Warfront platform for monitoring and streaming analysis. It is only
    applicable on VMC mode.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "WaveFrontGlobalCollector"
    """
    Identifier denoting this class, when it is used 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 = {
                            'tracing_port': 'tracing_port',
                            'collector_ip': 'collector_ip',
                            'collector_port': 'collector_port',
                            'collector_type': 'collector_type',
                            }

    def __init__(self,
                 tracing_port=None,
                 collector_ip=None,
                 collector_port=None,
                 collector_type='WaveFrontGlobalCollector',
                ):
        """
        :type  tracing_port: :class:`long` or ``None``
        :param tracing_port: Port for the Wavefront tracing. format: int32
        :type  collector_ip: :class:`str` or ``None``
        :param collector_ip: IP address for the global collector. format: ip
        :type  collector_port: :class:`long` or ``None``
        :param collector_port: Port for the global collector. format: int32
        :type  collector_type: :class:`str`
        :param collector_type: Possible values are: 
            
            * :attr:`GlobalCollectorConfig.COLLECTOR_TYPE_VRNI`
            * :attr:`GlobalCollectorConfig.COLLECTOR_TYPE_WAVE_FRONT`
            
            Specify the global collector type.
        """
        self.tracing_port = tracing_port
        self.collector_ip = collector_ip
        self.collector_port = collector_port
        self._collector_type = collector_type
        VapiStruct.__init__(self)

    @property
    def collector_type(self):
        """
        Return the discriminator value
        """
        return self._collector_type

WaveFrontGlobalCollector._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.wave_front_global_collector', {
        'tracing_port': type.OptionalType(type.IntegerType()),
        'collector_ip': type.OptionalType(type.StringType()),
        'collector_port': type.OptionalType(type.IntegerType()),
        'collector_type': type.StringType(),
    },
    WaveFrontGlobalCollector,
    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_CUSTOMFILTERWIDGETCONFIGURATION = "CustomFilterWidgetConfiguration"
    """


    """
    RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION = "TimeRangeDropdownFilterWidgetConfiguration"
    """


    """
    RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION = "DropdownFilterWidgetConfiguration"
    """


    """
    RESOURCE_TYPE_SPACERWIDGETCONFIGURATION = "SpacerWidgetConfiguration"
    """


    """
    RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION = "LegendWidgetConfiguration"
    """


    """



    _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',
                            'condition': 'condition',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'feature_set': 'feature_set',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'filters': 'filters',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'plot_configs': 'plot_configs',
                            'rowspan': 'rowspan',
                            'shared': 'shared',
                            'show_header': 'show_header',
                            '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,
                 condition=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 feature_set=None,
                 filter=None,
                 filter_value_required=None,
                 filters=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 plot_configs=None,
                 rowspan=None,
                 shared=None,
                 show_header=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_: 
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will 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_CUSTOMFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_TIMERANGEDROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_SPACERWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_LEGENDWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration,
            CustomFilterWidgetConfiguration,
            TimeRangeDropdownFilterWidgetConfiguration,
            SpacerWidgetConfiguration, LegendWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the widget will be displayed to UI. If
            no condition is provided, then the widget will be displayed
            unconditionally.
        :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  feature_set: :class:`FeatureSet` or ``None``
        :param feature_set: 
        :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. This
            field is deprecated instead use 'filters' property.

            .. deprecated:: unknown
        :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  filters: :class:`list` of :class:`str` or ``None``
        :param filters: A List of filter applied to this widget configuration. This will be
            used to identify the filters applied to this widget.
        :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: 
        :type  plot_configs: :class:`list` of :class:`WidgetPlotConfiguration` or ``None``
        :param plot_configs: List of plotting configuration for a given widget. Widget plotting
            configurations which are common across all the widgets types should
            be define here.
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container. 1 Row span
            is equal to 20px. format: int32
        :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.

            .. deprecated:: unknown
        :type  show_header: :class:`bool` or ``None``
        :param show_header: If the value of this field is set to true then card header will be
            displayed otherwise only card will be displayed without header.
        :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

            .. deprecated:: unknown
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.condition = condition
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.feature_set = feature_set
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.filters = filters
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.plot_configs = plot_configs
        self.rowspan = rowspan
        self.shared = shared
        self.show_header = show_header
        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'))),
        'condition': type.OptionalType(type.StringType()),
        '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()),
        'feature_set': type.OptionalType(type.ReferenceType(__name__, 'FeatureSet')),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'filters': type.OptionalType(type.ListType(type.StringType())),
        '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')),
        'plot_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetPlotConfiguration'))),
        'rowspan': type.OptionalType(type.IntegerType()),
        'shared': type.OptionalType(type.BooleanType()),
        'show_header': 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',
                            'rowspan': 'rowspan',
                            'separator': 'separator',
                            'span': 'span',
                            'weight': 'weight',
                            'widget_id': 'widget_id',
                            }

    def __init__(self,
                 alignment=None,
                 label=None,
                 rowspan=None,
                 separator=None,
                 span=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: 
        :type  rowspan: :class:`long` or ``None``
        :param rowspan: Represents the vertical span of the widget / container format:
            int32
        :type  separator: :class:`bool` or ``None``
        :param separator: If true, separates this widget in a container.
        :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: 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.rowspan = rowspan
        self.separator = separator
        self.span = span
        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')),
        'rowspan': type.OptionalType(type.IntegerType()),
        'separator': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
        'widget_id': type.OptionalType(type.StringType()),
    },
    WidgetItem,
    False,
    None))



class WidgetPlotConfiguration(VapiStruct):
    """
    Base type for widget plot config.

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



    _canonical_to_pep_names = {
                            'allow_maximize': 'allow_maximize',
                            'condition': 'condition',
                            }

    def __init__(self,
                 allow_maximize=None,
                 condition=None,
                ):
        """
        :type  allow_maximize: :class:`bool` or ``None``
        :param allow_maximize: Allow maximize capability for this widget
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the given chart config is applied to
            the widget configuration.
        """
        self.allow_maximize = allow_maximize
        self.condition = condition
        VapiStruct.__init__(self)


WidgetPlotConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.widget_plot_configuration', {
        'allow_maximize': type.OptionalType(type.BooleanType()),
        'condition': type.OptionalType(type.StringType()),
    },
    WidgetPlotConfiguration,
    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"
    """


    """



    _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',
                            'sha_256_thumbprint': 'sha256_thumbprint',
                            '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,
                 sha256_thumbprint=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: 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  sha256_thumbprint: :class:`str` or ``None``
        :param sha256_thumbprint: The SHA256 thumbprint of the certificate, in hexadecimal notation.
            This 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.sha256_thumbprint = sha256_thumbprint
        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()),
        'sha_256_thumbprint': 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 = {
    }

