# Copyright 2014 Rackspace # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from octavia_lib.common import constants as lib_consts ############################################################################## # Constants common to the provider drivers moved to # octavia_lib.common.constants # These are deprecated, to be removed in the 'U' release ############################################################################## # 'loadbalancers' LOADBALANCERS = lib_consts.LOADBALANCERS # 'listeners' LISTENERS = lib_consts.LISTENERS # 'pools' POOLS = lib_consts.POOLS # HEALTHMONITORS = 'healthmonitors' HEALTHMONITORS = lib_consts.HEALTHMONITORS # 'members' MEMBERS = lib_consts.MEMBERS # 'l7policies' L7POLICIES = lib_consts.L7POLICIES # 'l7rules' L7RULES = lib_consts.L7RULES # 'PING' HEALTH_MONITOR_PING = lib_consts.HEALTH_MONITOR_PING # 'TCP' HEALTH_MONITOR_TCP = lib_consts.HEALTH_MONITOR_TCP # 'HTTP' HEALTH_MONITOR_HTTP = lib_consts.HEALTH_MONITOR_HTTP # 'HTTPS' HEALTH_MONITOR_HTTPS = lib_consts.HEALTH_MONITOR_HTTPS # 'TLS-HELLO' HEALTH_MONITOR_TLS_HELLO = lib_consts.HEALTH_MONITOR_TLS_HELLO # 'UDP-CONNECT' HEALTH_MONITOR_UDP_CONNECT = lib_consts.HEALTH_MONITOR_UDP_CONNECT SUPPORTED_HEALTH_MONITOR_TYPES = lib_consts.SUPPORTED_HEALTH_MONITOR_TYPES # 'GET' HEALTH_MONITOR_HTTP_METHOD_GET = lib_consts.HEALTH_MONITOR_HTTP_METHOD_GET # 'HEAD' HEALTH_MONITOR_HTTP_METHOD_HEAD = lib_consts.HEALTH_MONITOR_HTTP_METHOD_HEAD # 'POST' HEALTH_MONITOR_HTTP_METHOD_POST = lib_consts.HEALTH_MONITOR_HTTP_METHOD_POST # 'PUT' HEALTH_MONITOR_HTTP_METHOD_PUT = lib_consts.HEALTH_MONITOR_HTTP_METHOD_PUT # 'DELETE' HEALTH_MONITOR_HTTP_METHOD_DELETE = ( lib_consts.HEALTH_MONITOR_HTTP_METHOD_DELETE) # 'TRACE' HEALTH_MONITOR_HTTP_METHOD_TRACE = lib_consts.HEALTH_MONITOR_HTTP_METHOD_TRACE # 'OPTIONS' HEALTH_MONITOR_HTTP_METHOD_OPTIONS = ( lib_consts.HEALTH_MONITOR_HTTP_METHOD_OPTIONS) # 'CONNECT' HEALTH_MONITOR_HTTP_METHOD_CONNECT = ( lib_consts.HEALTH_MONITOR_HTTP_METHOD_CONNECT) # 'PATCH' HEALTH_MONITOR_HTTP_METHOD_PATCH = lib_consts.HEALTH_MONITOR_HTTP_METHOD_PATCH SUPPORTED_HEALTH_MONITOR_HTTP_METHODS = ( lib_consts.SUPPORTED_HEALTH_MONITOR_HTTP_METHODS) # 'REJECT' L7POLICY_ACTION_REJECT = lib_consts.L7POLICY_ACTION_REJECT # 'REDIRECT_TO_URL' L7POLICY_ACTION_REDIRECT_TO_URL = lib_consts.L7POLICY_ACTION_REDIRECT_TO_URL # 'REDIRECT_TO_POOL' L7POLICY_ACTION_REDIRECT_TO_POOL = lib_consts.L7POLICY_ACTION_REDIRECT_TO_POOL # 'REDIRECT_PREFIX' L7POLICY_ACTION_REDIRECT_PREFIX = lib_consts.L7POLICY_ACTION_REDIRECT_PREFIX SUPPORTED_L7POLICY_ACTIONS = lib_consts.SUPPORTED_L7POLICY_ACTIONS # 'REGEX' L7RULE_COMPARE_TYPE_REGEX = lib_consts.L7RULE_COMPARE_TYPE_REGEX # 'STARTS_WITH' L7RULE_COMPARE_TYPE_STARTS_WITH = lib_consts.L7RULE_COMPARE_TYPE_STARTS_WITH # 'ENDS_WITH' L7RULE_COMPARE_TYPE_ENDS_WITH = lib_consts.L7RULE_COMPARE_TYPE_ENDS_WITH # 'CONTAINS' L7RULE_COMPARE_TYPE_CONTAINS = lib_consts.L7RULE_COMPARE_TYPE_CONTAINS # 'EQUAL_TO' L7RULE_COMPARE_TYPE_EQUAL_TO = lib_consts.L7RULE_COMPARE_TYPE_EQUAL_TO SUPPORTED_L7RULE_COMPARE_TYPES = lib_consts.SUPPORTED_L7RULE_COMPARE_TYPES # 'HOST_NAME' L7RULE_TYPE_HOST_NAME = lib_consts.L7RULE_TYPE_HOST_NAME # 'PATH' L7RULE_TYPE_PATH = lib_consts.L7RULE_TYPE_PATH # 'FILE_TYPE' L7RULE_TYPE_FILE_TYPE = lib_consts.L7RULE_TYPE_FILE_TYPE # 'HEADER' L7RULE_TYPE_HEADER = lib_consts.L7RULE_TYPE_HEADER # 'COOKIE' L7RULE_TYPE_COOKIE = lib_consts.L7RULE_TYPE_COOKIE # 'SSL_CONN_HAS_CERT' L7RULE_TYPE_SSL_CONN_HAS_CERT = lib_consts.L7RULE_TYPE_SSL_CONN_HAS_CERT # 'SSL_VERIFY_RESULT' L7RULE_TYPE_SSL_VERIFY_RESULT = lib_consts.L7RULE_TYPE_SSL_VERIFY_RESULT # 'SSL_DN_FIELD' L7RULE_TYPE_SSL_DN_FIELD = lib_consts.L7RULE_TYPE_SSL_DN_FIELD SUPPORTED_L7RULE_TYPES = lib_consts.SUPPORTED_L7RULE_TYPES # 'ROUND_ROBIN' LB_ALGORITHM_ROUND_ROBIN = lib_consts.LB_ALGORITHM_ROUND_ROBIN # 'LEAST_CONNECTIONS' LB_ALGORITHM_LEAST_CONNECTIONS = lib_consts.LB_ALGORITHM_LEAST_CONNECTIONS # 'SOURCE_IP' LB_ALGORITHM_SOURCE_IP = lib_consts.LB_ALGORITHM_SOURCE_IP SUPPORTED_LB_ALGORITHMS = lib_consts.SUPPORTED_LB_ALGORITHMS # 'operating_status' OPERATING_STATUS = lib_consts.OPERATING_STATUS # 'ONLINE' ONLINE = lib_consts.ONLINE # 'OFFLINE' OFFLINE = lib_consts.OFFLINE # 'DEGRADED' DEGRADED = lib_consts.DEGRADED # 'ERROR' ERROR = lib_consts.ERROR # 'DRAINING' DRAINING = lib_consts.DRAINING # 'NO_MONITOR' NO_MONITOR = lib_consts.NO_MONITOR # 'operating_status' SUPPORTED_OPERATING_STATUSES = lib_consts.SUPPORTED_OPERATING_STATUSES # 'TCP' PROTOCOL_TCP = lib_consts.PROTOCOL_TCP # 'UDP' PROTOCOL_UDP = lib_consts.PROTOCOL_UDP # 'HTTP' PROTOCOL_HTTP = lib_consts.PROTOCOL_HTTP # 'HTTPS' PROTOCOL_HTTPS = lib_consts.PROTOCOL_HTTPS # 'TERMINATED_HTTPS' PROTOCOL_TERMINATED_HTTPS = lib_consts.PROTOCOL_TERMINATED_HTTPS # 'PROXY' PROTOCOL_PROXY = lib_consts.PROTOCOL_PROXY SUPPORTED_PROTOCOLS = lib_consts.SUPPORTED_PROTOCOLS # 'provisioning_status' PROVISIONING_STATUS = lib_consts.PROVISIONING_STATUS # Amphora has been allocated to a load balancer 'ALLOCATED' AMPHORA_ALLOCATED = lib_consts.AMPHORA_ALLOCATED # Amphora is being built 'BOOTING' AMPHORA_BOOTING = lib_consts.AMPHORA_BOOTING # Amphora is ready to be allocated to a load balancer 'READY' AMPHORA_READY = lib_consts.AMPHORA_READY # 'ACTIVE' ACTIVE = lib_consts.ACTIVE # 'PENDING_DELETE' PENDING_DELETE = lib_consts.PENDING_DELETE # 'PENDING_UPDATE' PENDING_UPDATE = lib_consts.PENDING_UPDATE # 'PENDING_CREATE' PENDING_CREATE = lib_consts.PENDING_CREATE # 'DELETED' DELETED = lib_consts.DELETED SUPPORTED_PROVISIONING_STATUSES = lib_consts.SUPPORTED_PROVISIONING_STATUSES # 'SOURCE_IP' SESSION_PERSISTENCE_SOURCE_IP = lib_consts.SESSION_PERSISTENCE_SOURCE_IP # 'HTTP_COOKIE' SESSION_PERSISTENCE_HTTP_COOKIE = lib_consts.SESSION_PERSISTENCE_HTTP_COOKIE # 'APP_COOKIE' SESSION_PERSISTENCE_APP_COOKIE = lib_consts.SESSION_PERSISTENCE_APP_COOKIE SUPPORTED_SP_TYPES = lib_consts.SUPPORTED_SP_TYPES # List of HTTP headers which are supported for insertion SUPPORTED_HTTP_HEADERS = lib_consts.SUPPORTED_HTTP_HEADERS # List of SSL headers for client certificate SUPPORTED_SSL_HEADERS = lib_consts.SUPPORTED_SSL_HEADERS ############################################################################### HEALTH_MONITOR_DEFAULT_EXPECTED_CODES = '200' HEALTH_MONITOR_HTTP_DEFAULT_METHOD = lib_consts.HEALTH_MONITOR_HTTP_METHOD_GET HEALTH_MONITOR_DEFAULT_URL_PATH = '/' TYPE = 'type' URL_PATH = 'url_path' HTTP_METHOD = 'http_method' HTTP_VERSION = 'http_version' EXPECTED_CODES = 'expected_codes' DELAY = 'delay' TIMEOUT = 'timeout' MAX_RETRIES = 'max_retries' MAX_RETRIES_DOWN = 'max_retries_down' RISE_THRESHOLD = 'rise_threshold' DOMAIN_NAME = 'domain_name' UPDATE_STATS = 'UPDATE_STATS' UPDATE_HEALTH = 'UPDATE_HEALTH' VALID_LISTENER_POOL_PROTOCOL_MAP = { PROTOCOL_TCP: [PROTOCOL_HTTP, PROTOCOL_HTTPS, PROTOCOL_PROXY, PROTOCOL_TCP], PROTOCOL_HTTP: [PROTOCOL_HTTP, PROTOCOL_PROXY], PROTOCOL_HTTPS: [PROTOCOL_HTTPS, PROTOCOL_PROXY, PROTOCOL_TCP], PROTOCOL_TERMINATED_HTTPS: [PROTOCOL_HTTP, PROTOCOL_PROXY], PROTOCOL_UDP: [PROTOCOL_UDP]} # API Integer Ranges MIN_PORT_NUMBER = 1 MAX_PORT_NUMBER = 65535 DEFAULT_CONNECTION_LIMIT = -1 MIN_CONNECTION_LIMIT = -1 DEFAULT_WEIGHT = 1 MIN_WEIGHT = 0 MAX_WEIGHT = 256 DEFAULT_MAX_RETRIES_DOWN = 3 MIN_HM_RETRIES = 1 MAX_HM_RETRIES = 10 # 1 year: y d h m ms MAX_TIMEOUT = 365 * 24 * 60 * 60 * 1000 MIN_TIMEOUT = 0 DEFAULT_TIMEOUT_CLIENT_DATA = 50000 DEFAULT_TIMEOUT_MEMBER_CONNECT = 5000 DEFAULT_TIMEOUT_MEMBER_DATA = 50000 DEFAULT_TIMEOUT_TCP_INSPECT = 0 MUTABLE_STATUSES = (lib_consts.ACTIVE,) DELETABLE_STATUSES = (lib_consts.ACTIVE, lib_consts.ERROR) FAILOVERABLE_STATUSES = (lib_consts.ACTIVE, lib_consts.ERROR) # Note: The database Amphora table has a foreign key constraint against # the provisioning_status table SUPPORTED_AMPHORA_STATUSES = ( lib_consts.AMPHORA_ALLOCATED, lib_consts.AMPHORA_BOOTING, lib_consts.ERROR, lib_consts.AMPHORA_READY, lib_consts.DELETED, lib_consts.PENDING_CREATE, lib_consts.PENDING_DELETE) AMPHORA_VM = 'VM' SUPPORTED_AMPHORA_TYPES = (AMPHORA_VM,) DISTINGUISHED_NAME_FIELD_REGEX = lib_consts.DISTINGUISHED_NAME_FIELD_REGEX # For redirect, only codes 301, 302, 303, 307 and 308 are # supported. SUPPORTED_L7POLICY_REDIRECT_HTTP_CODES = [301, 302, 303, 307, 308] SUPPORTED_HTTP_VERSIONS = [1.0, 1.1] MIN_POLICY_POSITION = 1 # Largest a 32-bit integer can be, which is a limitation # here if you're using MySQL, as most probably are. This just needs # to be larger than any existing rule position numbers which will # definitely be the case with 2147483647 MAX_POLICY_POSITION = 2147483647 # Testing showed haproxy config failed to parse after more than # 53 rules per policy MAX_L7RULES_PER_L7POLICY = 50 # See RFCs 2616, 2965, 6265, 7230: Should match characters valid in a # http header or cookie name. HTTP_HEADER_NAME_REGEX = r'\A[a-zA-Z0-9!#$%&\'*+-.^_`|~]+\Z' # See RFCs 2616, 2965, 6265: Should match characters valid in a cookie value. HTTP_COOKIE_VALUE_REGEX = r'\A[a-zA-Z0-9!#$%&\'()*+-./:<=>?@[\]^_`{|}~]+\Z' # See RFC 7230: Should match characters valid in a header value. HTTP_HEADER_VALUE_REGEX = (r'\A[a-zA-Z0-9' r'!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~\\]+\Z') # Also in RFC 7230: Should match characters valid in a header value # when quoted with double quotes. HTTP_QUOTED_HEADER_VALUE_REGEX = (r'\A"[a-zA-Z0-9 \t' r'!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~\\]*"\Z') DOMAIN_NAME_REGEX = ( r'^(?=.{1,253}\.?$)(?:(?!-|[^.]+_)[A-Za-z0-9-_]{1,63}(?