Source code for illumio.util.constants

# -*- coding: utf-8 -*-

"""This module provides constant values and enumerations used by the PCE REST API.

Copyright:
    © 2022 Illumio

License:
    Apache2, see LICENSE for more details.
"""
import re
from enum import Enum, EnumMeta

#: Active policy version path literal.
ACTIVE = 'active'

#: Draft policy version path literal.
DRAFT = 'draft'

#: Used in rules and enforcement boundaries to denote that all
#: workloads should be affected.
AMS = 'ams'

#: Used in resolve_labels_as block in rule creation to denote that
#: workloads matching the rule scope should be affected.
RESOLVE_AS_WORKLOADS = 'workloads'

#: Used in resolve_labels_as block in rule creation to denote that
#: virtual services matching the rule scope should be affected.
RESOLVE_AS_VIRTUAL_SERVICES = 'virtual_services'

#: Name of the default global IP list.
ANY_IP_LIST_NAME = 'Any (0.0.0.0/0 and ::/0)'

#: Name of the default global Service.
ALL_SERVICES_NAME = 'All Services'

#: Max port number.
PORT_MAX = 65535

#: Max value for the ICMP header Code field.
#: See https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml#icmp-parameters-codes
ICMP_CODE_MAX = 15

#: Max value for the ICMP header Type field.
#: See https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml#icmp-parameters-types
ICMP_TYPE_MAX = 255

FQDN_REGEX = re.compile('(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)')
HREF_REGEX = re.compile('^\/orgs\/\d+\/(?:sec_policy\/(?:active|draft)\/)?(?P<type>[a-zA-Z_]+)\/(?P<uid>[a-zA-Z0-9-]+)$')

#: Upper limit on the number of objects that can be sent to PCE bulk change
#: endpoints in a single request.
BULK_CHANGE_LIMIT = 1000

PCE_APIS = {}


class IllumioEnumMeta(EnumMeta):
    """Metaclass to provide a common contains check for enumerations."""

    def __contains__(cls, value):
        if value is None:
            return False
        if type(value) is str:
            value = value.lower()
        if isinstance(type(value), IllumioEnumMeta):
            value = value.value
        return value in cls._value2member_map_


[docs]class LinkState(str, Enum, metaclass=IllumioEnumMeta): """Network interface link state enumeration.""" UP = 'up' DOWN = 'down' UNKNOWN = 'unknown'
[docs]class EnforcementMode(str, Enum, metaclass=IllumioEnumMeta): """Workload enforcement mode enumeration.""" IDLE = 'idle' VISIBILITY_ONLY = 'visibility_only' FULL = 'full' SELECTIVE = 'selective'
[docs]class VisibilityLevel(str, Enum, metaclass=IllumioEnumMeta): """Workload visibility level enumeration.""" FLOW_FULL_DETAIL = 'flow_full_detail' FLOW_SUMMARY = 'flow_summary' FLOW_DROPS = 'flow_drops' FLOW_OFF = 'flow_off' ENHANCED_DATA_COLLECTION = 'enhanced_data_collection'
class PolicyDecision(str, Enum, metaclass=IllumioEnumMeta): """Traffic flow policy decision enumeration.""" ALLOWED = 'allowed' BLOCKED = 'blocked' POTENTIALLY_BLOCKED = 'potentially_blocked' UNKNOWN = 'unknown'
[docs]class Transmission(str, Enum, metaclass=IllumioEnumMeta): """Traffic flow transmission enumeration.""" BROADCAST = 'broadcast' MULTICAST = 'multicast' UNICAST = 'unicast'
[docs]class FlowDirection(str, Enum, metaclass=IllumioEnumMeta): """Traffic flow direction enumeration.""" INBOUND = 'inbound' OUTBOUND = 'outbound'
[docs]class TrafficState(str, Enum, metaclass=IllumioEnumMeta): """Traffic flow state enumeration.""" ACTIVE = 'active' CLOSED = 'closed' TIMED_OUT = 'timed out' SNAPSHOT = 'snapshot' NEW = 'new' UNKNOWN = 'unknown' INCOMPLETE = 'incomplete'
[docs]class ApplyTo(str, Enum, metaclass=IllumioEnumMeta): """Virtual service apply to value enumeration.""" HOST_ONLY = 'host_only' INTERNAL_BRIDGE_NETWORK = 'internal_bridge_network'
[docs]class VENType(str, Enum, metaclass=IllumioEnumMeta): """VEN type enumeration.""" SERVER = 'server' ENDPOINT = 'endpoint' CONTAINERIZED = 'containerized'
[docs]class ChangeType(str, Enum, metaclass=IllumioEnumMeta): """Resource event change type enumeration.""" CREATE = 'create' UPDATE = 'update' DELETE = 'delete'
[docs]class EventSeverity(str, Enum, metaclass=IllumioEnumMeta): """Event severity enumeration.""" EMERGENCY = 'emerg' ALERT = 'alert' CRITICAL = 'crit' ERROR = 'err' WARNING = 'warning' NOTICE = 'notice' INFO = 'info' DEBUG = 'debug'
[docs]class EventStatus(str, Enum, metaclass=IllumioEnumMeta): """Event status enumeration.""" SUCCESS = 'success' FAILURE = 'failure'
__all__ = [ 'ACTIVE', 'DRAFT', 'AMS', 'RESOLVE_AS_WORKLOADS', 'RESOLVE_AS_VIRTUAL_SERVICES', 'ANY_IP_LIST_NAME', 'ALL_SERVICES_NAME', 'PORT_MAX', 'ICMP_CODE_MAX', 'ICMP_TYPE_MAX', 'FQDN_REGEX', 'HREF_REGEX', 'BULK_CHANGE_LIMIT', 'PCE_APIS', 'EnforcementMode', 'LinkState', 'EnforcementMode', 'VisibilityLevel', 'PolicyDecision', 'Transmission', 'FlowDirection', 'TrafficState', 'ApplyTo', 'VENType', 'ChangeType', 'EventSeverity', 'EventStatus', ]