modular_sdk/commons/constants.py (231 lines of code) (raw):

from enum import Enum import os HTTP_ATTR, HTTPS_ATTR = 'HTTP', 'HTTPS' ASSUMES_ROLE_SESSION_NAME = 'modular' MODULAR_AWS_ACCESS_KEY_ID_ENV = 'modular_aws_access_key_id' MODULAR_AWS_SECRET_ACCESS_KEY_ENV = 'modular_aws_secret_access_key' MODULAR_AWS_SESSION_TOKEN_ENV = 'modular_aws_session_token' MODULAR_AWS_CREDENTIALS_EXPIRATION_ENV = 'modular_aws_credentials_expiration' _SENTINEL = object() class Env(str, Enum): """ Abstract enumeration class for holding environment variables """ default: str | None def __new__(cls, value: str, default: str | None = None): """ All environment variables and optionally their default values. Since envs always have string type the default value also should be of string type and then converted to the necessary type in code. There is no default value if not specified (default equal to unset) """ obj = str.__new__(cls, value) obj._value_ = value obj.default = default return obj def get(self, default=_SENTINEL) -> str | None: if default is _SENTINEL: default = self.default if default is not None: default = str(default) return os.environ.get(self.value, default) def set(self, val: str | None): if val is None: os.environ.pop(self.value, None) else: os.environ[self.value] = str(val) # OLD ones OLD_SERVICE_MODE = 'modular_service_mode' OLD_MONGO_USER = 'modular_mongo_user' OLD_MONGO_PASSWORD = 'modular_mongo_password' OLD_MONGO_URL = 'modular_mongo_url' OLD_MONGO_DB_NAME = 'modular_mongo_db_name' OLD_ASSUME_ROLE_ARN = 'modular_assume_role_arn' # may be multiple split by , OLD_MODULAR_AWS_REGION = 'MODULAR_AWS_REGION' # used for cross account models access OLD_INNER_CACHE_TTL_SECONDS = 'INNER_CACHE_TTL_SECONDS', '600' # TODO they are NOT used currently. We should add their support to # code but make a gradual transition from the old ones so that both # old and new are supported for some time. # NEW ones SERVICE_MODE = 'MODULAR_SDK_SERVICE_MODE' MONGO_USER = 'MODULAR_SDK_MONGO_USER' MONGO_PASSWORD = 'MODULAR_SDK_MONGO_PASSWORD' MONGO_URL = 'MODULAR_SDK_MONGO_URL' MONGO_DB_NAME = 'MODULAR_SDK_MONGO_DB_NAME' ASSUME_ROLE_ARN = 'MODULAR_SDK_ASSUME_ROLE_ARN' ASSUME_ROLE_REGION = 'MODULAR_SDK_ASSUME_ROLE_REGION' INNER_CACHE_TTL_SECONDS = 'MODULAR_SDK_INNER_CACHE_TTL_SECONDS', '300' # these below are used AWS_REGION = 'AWS_REGION' AWS_DEFAULT_REGION = 'AWS_DEFAULT_REGION' LOG_LEVEL = 'MODULAR_SDK_LOG_LEVEL', 'INFO' REGION_ENV = Env.AWS_REGION.value DEFAULT_REGION_ENV = Env.AWS_DEFAULT_REGION.value MODULAR_REGION_ENV = Env.OLD_MODULAR_AWS_REGION.value MODULAR_SERVICE_MODE_ENV = Env.OLD_SERVICE_MODE.value SERVICE_MODE_DOCKER = 'docker' SERVICE_MODE_SAAS = 'saas' PARAM_MONGO_USER = Env.OLD_MONGO_USER.value PARAM_MONGO_PASSWORD = Env.OLD_MONGO_PASSWORD.value PARAM_MONGO_URL = Env.OLD_MONGO_URL.value PARAM_MONGO_DB_NAME = Env.OLD_MONGO_DB_NAME.value PARAM_ASSUME_ROLE_ARN = Env.OLD_ASSUME_ROLE_ARN.value ENV_INNER_CACHE_TTL_SECONDS = Env.OLD_INNER_CACHE_TTL_SECONDS.value DEFAULT_INNER_CACHE_TTL_SECONDS: int = int(Env.OLD_INNER_CACHE_TTL_SECONDS.default) class ParentType(str, Enum): AWS_ATHENA = 'AWS_ATHENA' AZURE_AD_SSO = 'AZURE_AD_SSO' GCP_SECURITY = 'GCP_SECURITY' AWS_MANAGEMENT = 'AWS_MANAGEMENT' GCP_MANAGEMENT = 'GCP_MANAGEMENT' AZURE_RATE_CARDS = 'AZURE_RATE_CARDS' AZURE_MANAGEMENT = 'AZURE_MANAGEMENT' AWS_COST_EXPLORER = 'AWS_COST_EXPLORER' AZURE_CSP_BILLING = 'AZURE_CSP_BILLING' AZURE_CSP_PARTNER = 'AZURE_CSP_PARTNER' AZURE_USAGE_DETAILS = 'AZURE_USAGE_DETAILS' GCP_BILLING_SERVICE = 'GCP_BILLING_SERVICE' AZURE_ENTERPRISE_BILLING = 'AZURE_ENTERPRISE_BILLING' CUSTODIAN = 'CUSTODIAN' CUSTODIAN_ACCESS = 'CUSTODIAN_ACCESS' CUSTODIAN_LICENSES = 'CUSTODIAN_LICENSES' RIGHTSIZER_PARENT = 'RIGHTSIZER' RIGHTSIZER_LICENSES_PARENT = 'RIGHTSIZER_LICENSES' RIGHTSIZER_SIEM_DEFECT_DOJO = 'RIGHTSIZER_SIEM_DEFECT_DOJO' CUSTODIAN_SIEM_DEFECT_DOJO = 'CUSTODIAN_SIEM_DEFECT_DOJO' PLATFORM_K8S = 'PLATFORM_K8S' GCP_CHRONICLE_INSTANCE = 'GCP_CHRONICLE_INSTANCE' @classmethod def iter(cls): """ Iterates over values, not enum items """ return map(lambda x: x.value, cls) # backward compatibility, use enum instead AWS_ATHENA = ParentType.AWS_ATHENA.value AZURE_AD_SSO = ParentType.AZURE_AD_SSO.value GCP_SECURITY = ParentType.GCP_SECURITY.value AWS_MANAGEMENT = ParentType.AWS_MANAGEMENT.value GCP_MANAGEMENT = ParentType.GCP_MANAGEMENT.value AZURE_RATE_CARDS = ParentType.AZURE_RATE_CARDS.value AZURE_MANAGEMENT = ParentType.AZURE_MANAGEMENT.value AWS_COST_EXPLORER = ParentType.AWS_COST_EXPLORER.value AZURE_CSP_BILLING = ParentType.AZURE_CSP_BILLING.value AZURE_CSP_PARTNER = ParentType.AZURE_CSP_PARTNER.value AZURE_USAGE_DETAILS = ParentType.AZURE_USAGE_DETAILS.value GCP_BILLING_SERVICE = ParentType.GCP_BILLING_SERVICE.value AZURE_ENTERPRISE_BILLING = ParentType.AZURE_ENTERPRISE_BILLING.value CUSTODIAN_TYPE = ParentType.CUSTODIAN.value CUSTODIAN_ACCESS_TYPE = ParentType.CUSTODIAN_ACCESS.value CUSTODIAN_LICENSES_TYPE = ParentType.CUSTODIAN_LICENSES.value RIGHTSIZER_PARENT_TYPE = ParentType.RIGHTSIZER_PARENT.value RIGHTSIZER_LICENSES_PARENT_TYPE = ParentType.RIGHTSIZER_LICENSES_PARENT.value RIGHTSIZER_SIEM_DEFECT_DOJO_TYPE = ParentType.RIGHTSIZER_SIEM_DEFECT_DOJO.value CUSTODIAN_SIEM_DEFECT_DOJO_TYPE = ParentType.CUSTODIAN_SIEM_DEFECT_DOJO.value ALL_PARENT_TYPES = list(ParentType.iter()) class Cloud(str, Enum): AZURE = 'AZURE' YANDEX = 'YANDEX' GOOGLE = 'GOOGLE' AWS = 'AWS' OPENSTACK = 'OPEN_STACK' CSA = 'CSA' HWU = 'HARDWARE' ENTERPRISE = 'ENTERPRISE' EXOSCALE = 'EXOSCALE' WORKSPACE = 'WORKSPACE' AOS = 'AOS' VSPHERE = 'VSPHERE' VMWARE = 'VMWARE' # VCloudDirector group NUTANIX = 'NUTANIX' @classmethod def iter(cls): """ Iterates over values, not enum items """ return map(lambda x: x.value, cls) # todo deprecated AZURE_CLOUD = Cloud.AZURE.value YANDEX_CLOUD = Cloud.YANDEX.value GOOGLE_CLOUD = Cloud.GOOGLE.value AWS_CLOUD = Cloud.AWS.value OPENSTACK_CLOUD = Cloud.OPENSTACK.value CSA_CLOUD = Cloud.CSA.value HWU_CLOUD = Cloud.HWU.value ENTERPRISE_CLOUD = Cloud.ENTERPRISE.value EXOSCALE_CLOUD = Cloud.EXOSCALE.value WORKSPACE_CLOUD = Cloud.WORKSPACE.value AOS_CLOUD = Cloud.AOS.value VSPHERE_CLOUD = Cloud.VSPHERE.value VMWARE_CLOUD = Cloud.VMWARE.value # VCloudDirector group NUTANIX_CLOUD = Cloud.NUTANIX.value CLOUD_SHORT_LONG_NAME_MAPPING = { Cloud.AZURE.value: 'AZ', Cloud.GOOGLE.value: 'GGL', Cloud.HWU.value: 'HW', Cloud.EXOSCALE.value: 'EXO', Cloud.ENTERPRISE.value: 'ENT', } CLOUD_PROVIDERS = list(Cloud.iter()) class ApplicationType(str, Enum): AWS_ROLE = 'AWS_ROLE' AWS_CREDENTIALS = 'AWS_CREDENTIALS' AZURE_CREDENTIALS = 'AZURE_CREDENTIALS' AZURE_CERTIFICATE = 'AZURE_CERTIFICATE' AZURE_ENROLMENT = 'AZURE_ENROLMENT' GCP_COMPUTE_ACCOUNT = 'GCP_COMPUTE_ACCOUNT' GCP_SERVICE_ACCOUNT = 'GCP_SERVICE_ACCOUNT' CUSTODIAN = 'CUSTODIAN' CUSTODIAN_LICENSES = 'CUSTODIAN_LICENSES' RIGHTSIZER = 'RIGHTSIZER' RIGHTSIZER_LICENSES = 'RIGHTSIZER_LICENSES' RABBITMQ = 'RABBITMQ' DEFECT_DOJO = 'DEFECT_DOJO' K8S_KUBE_CONFIG = 'K8S_KUBE_CONFIG' GCP_CHRONICLE_INSTANCE = 'GCP_CHRONICLE_INSTANCE' @classmethod def iter(cls): """ Iterates over values, not enum items """ return map(lambda x: x.value, cls) # backward compatibility AWS_ROLE = ApplicationType.AWS_ROLE.value AWS_CREDENTIALS = ApplicationType.AWS_CREDENTIALS.value AZURE_CREDENTIALS = ApplicationType.AZURE_CREDENTIALS.value AZURE_CERTIFICATE = ApplicationType.AZURE_CERTIFICATE.value AZURE_ENROLMENT = ApplicationType.AZURE_ENROLMENT.value GCP_COMPUTE_ACCOUNT = ApplicationType.GCP_COMPUTE_ACCOUNT.value GCP_SERVICE_ACCOUNT = ApplicationType.GCP_SERVICE_ACCOUNT.value # CUSTODIAN_TYPE = 'CUSTODIAN' # declared in parents # CUSTODIAN_LICENSES_TYPE = 'CUSTODIAN_LICENSES' RIGHTSIZER_TYPE = ApplicationType.RIGHTSIZER.value RIGHTSIZER_LICENSES_TYPE = ApplicationType.RIGHTSIZER_LICENSES.value RABBITMQ_TYPE = ApplicationType.RABBITMQ.value DEFECT_DOJO_TYPE = ApplicationType.DEFECT_DOJO.value AVAILABLE_APPLICATION_TYPES = list(ApplicationType.iter()) # environment service ENVS_TO_HIDE = set() HIDDEN_ENV_PLACEHOLDER = '****' # Tenant parent map types - probably deprecate TENANT_PARENT_MAP_BILLING_TYPE = 'BILLING' TENANT_PARENT_MAP_MANAGEMENT_TYPE = 'MANAGEMENT' TENANT_PARENT_MAP_CUSTODIAN_TYPE = CUSTODIAN_TYPE TENANT_PARENT_MAP_CUSTODIAN_ACCESS_TYPE = CUSTODIAN_ACCESS_TYPE TENANT_PARENT_MAP_CUSTODIAN_LICENSES_TYPE = CUSTODIAN_LICENSES_TYPE TENANT_PARENT_MAP_RIGHTSIZER_TYPE = 'RIGHTSIZER' TENANT_PARENT_MAP_RIGHTSIZER_LICENSES_TYPE = 'RIGHTSIZER_LICENSES' TENANT_PARENT_MAP_RIGHTSIZER_SIEM_DEFECT_DOJO_TYPE = ( RIGHTSIZER_SIEM_DEFECT_DOJO_TYPE) TENANT_PARENT_MAP_CUSTODIAN_SIEM_DEFECT_DOJO_TYPE = ( CUSTODIAN_SIEM_DEFECT_DOJO_TYPE) ALLOWED_TENANT_PARENT_MAP_KEYS = ( TENANT_PARENT_MAP_BILLING_TYPE, TENANT_PARENT_MAP_MANAGEMENT_TYPE, TENANT_PARENT_MAP_CUSTODIAN_TYPE, TENANT_PARENT_MAP_RIGHTSIZER_TYPE, TENANT_PARENT_MAP_RIGHTSIZER_LICENSES_TYPE, TENANT_PARENT_MAP_RIGHTSIZER_SIEM_DEFECT_DOJO_TYPE, TENANT_PARENT_MAP_CUSTODIAN_SIEM_DEFECT_DOJO_TYPE, TENANT_PARENT_MAP_CUSTODIAN_LICENSES_TYPE, TENANT_PARENT_MAP_CUSTODIAN_ACCESS_TYPE ) DEFAULT_AWS_REGION = 'us-east-1' # native cloud credentials envs # AWS ENV_AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID' ENV_AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY' ENV_AWS_SESSION_TOKEN = 'AWS_SESSION_TOKEN' ENV_AWS_DEFAULT_REGION = 'AWS_DEFAULT_REGION' # AZURE ENV_AZURE_TENANT_ID = 'AZURE_TENANT_ID' ENV_AZURE_SUBSCRIPTION_ID = 'AZURE_SUBSCRIPTION_ID' ENV_AZURE_CLIENT_ID = 'AZURE_CLIENT_ID' ENV_AZURE_CLIENT_SECRET = 'AZURE_CLIENT_SECRET' ENV_AZURE_CLIENT_CERTIFICATE_PATH = 'AZURE_CLIENT_CERTIFICATE_PATH' ENV_AZURE_CLIENT_CERTIFICATE_PASSWORD = 'AZURE_CLIENT_CERTIFICATE_PASSWORD' # GOOGLE ENV_GOOGLE_APPLICATION_CREDENTIALS = 'GOOGLE_APPLICATION_CREDENTIALS' ENV_CLOUDSDK_CORE_PROJECT = 'CLOUDSDK_CORE_PROJECT' # KUBERNETES ENV_KUBECONFIG = 'KUBECONFIG' COMPOUND_KEYS_SEPARATOR = '#' class ParentScope(str, Enum): ALL = 'ALL' DISABLED = 'DISABLED' SPECIFIC = 'SPECIFIC' @classmethod def iter(cls): """ Iterates over values, not enum items """ return map(lambda x: x.value, cls) JOB_SUCCESS_STATE = 'SUCCESS' JOB_FAIL_STATE = 'FAIL' JOB_RUNNING_STATE = 'RUNNING' PLAIN_CONTENT_TYPE = 'text/plain' SUCCESS_STATUS = 'SUCCESS' ERROR_STATUS = 'FAILED' RESULTS = 'results' DATA = 'data'