class Intervals(object): """All intervals are in seconds""" OPERATIONS_DEFAULT_RETRY_DELAY = config.get_int( 'POLYAXON_INTERVALS_OPERATIONS_DEFAULT_RETRY_DELAY', is_optional=True) or 60 OPERATIONS_MAX_RETRY_DELAY = config.get_int( 'POLYAXON_INTERVALS_OPERATIONS_MAX_RETRY_DELAY', is_optional=True) or 60 * 60 PIPELINES_SCHEDULER = config.get_int( 'POLYAXON_INTERVALS_PIPELINES_SCHEDULER', is_optional=True) or 30 EXPERIMENTS_SCHEDULER = config.get_int( 'POLYAXON_INTERVALS_EXPERIMENTS_SCHEDULER', is_optional=True) or 30 EXPERIMENTS_SYNC = config.get_int('POLYAXON_INTERVALS_EXPERIMENTS_SYNC', is_optional=True) or 30 CLUSTERS_UPDATE_SYSTEM_INFO = config.get_int( 'POLYAXON_INTERVALS_CLUSTERS_UPDATE_SYSTEM_INFO', is_optional=True) or 150 CLUSTERS_UPDATE_SYSTEM_NODES = config.get_int( 'POLYAXON_INTERVALS_CLUSTERS_UPDATE_SYSTEM_NODES', is_optional=True) or 150 CLUSTERS_NOTIFICATION_ALIVE = 150 @staticmethod def get_schedule(interval): return timedelta(seconds=int(interval)) @staticmethod def get_expires(interval): int(interval / 2)
# -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function from polyaxon.utils import config email_from = config.get_string('POLYAXON_EMAIL_FROM') email_host = config.get_string('POLYAXON_EMAIL_HOST') email_port = config.get_int('POLYAXON_EMAIL_PORT') email_host_user = config.get_string('POLYAXON_EMAIL_HOST_USER', is_optional=True) email_host_password = config.get_string('POLYAXON_EMAIL_HOST_PASSWORD', is_optional=True, is_secret=True) EMAIL_BACKEND = config.get_string('POLYAXON_EMAIL_BACKEND', is_optional=True) if EMAIL_BACKEND is None: EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function from polyaxon.utils import config REGISTRATION_SUPERUSER_VALIDATION_WORKFLOW = '0' EMAIL_VALIDATION_WORKFLOW = '1' REGISTRATION_WORKFLOW = REGISTRATION_SUPERUSER_VALIDATION_WORKFLOW USERS_MINIMUM_PASSWORD_LENGTH = config.get_int('POLYAXON_PASSWORD_LENGTH') AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': { 'min_length': USERS_MINIMUM_PASSWORD_LENGTH, } }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
# Types TYPE_LABELS_CORE = config.get_string('POLYAXON_TYPE_LABELS_CORE') TYPE_LABELS_EXPERIMENT = config.get_string('POLYAXON_TYPE_LABELS_EXPERIMENT') # Plugin jobs app APP_LABELS_TENSORBOARD = config.get_string('POLYAXON_APP_LABELS_TENSORBOARD') APP_LABELS_NOTEBOOK = config.get_string('POLYAXON_APP_LABELS_NOTEBOOK') # Selectors NODE_SELECTORS_EXPERIMENTS = config.get_string( 'POLYAXON_NODE_SELECTORS_EXPERIMENTS', is_optional=True) CONTAINER_NAME_JOB = config.get_string('POLYAXON_CONTAINER_NAME_JOB') CONTAINER_NAME_SIDECAR = config.get_string('POLYAXON_CONTAINER_NAME_SIDECAR') CONTAINER_NAME_PLUGIN_JOB = config.get_string( 'POLYAXON_CONTAINER_NAME_PLUGIN_JOB') JOB_DOCKER_NAME = config.get_string('POLYAXON_JOB_DOCKER_NAME', is_optional=True, default='polyaxon/polyaxon-lib') JOB_SIDECAR_DOCKER_IMAGE = config.get_string( 'POLYAXON_JOB_SIDECAR_DOCKER_IMAGE', is_optional=True, default='polyaxon/polyaxon-sidecar') TENSORBOARD_DOCKER_IMAGE = config.get_string( 'POLYAXON_TENSORBOARD_DOCKER_IMAGE', is_optional=True, default='tensorflow/tensorflow:1.4.1-py3') JOB_SIDECAR_LOG_SLEEP_INTERVAL = config.get_int( 'POLYAXON_JOB_SIDECAR_LOG_SLEEP_INTERVAL', is_optional=True)
AMQP_URL = config.get_string('POLYAXON_AMQP_URL') RABBITMQ_USER = config.get_string('POLYAXON_RABBITMQ_USER', is_optional=True) RABBITMQ_PASSWORD = config.get_string('POLYAXON_RABBITMQ_PASSWORD', is_secret=True, is_optional=True) if RABBITMQ_USER and RABBITMQ_PASSWORD: CELERY_BROKER_URL = 'amqp://{user}:{password}@{url}'.format( user=RABBITMQ_USER, password=RABBITMQ_PASSWORD, url=AMQP_URL) CELERY_BROKER_URL = 'amqp://{url}'.format(url=AMQP_URL) INTERNAL_EXCHANGE = config.get_string('POLYAXON_INTERNAL_EXCHANGE') # CELERY_RESULT_BACKEND = config.get_string('POLYAXON_REDIS_CELERY_RESULT_BACKEND_URL') CELERYD_PREFETCH_MULTIPLIER = config.get_int( 'POLYAXON_CELERYD_PREFETCH_MULTIPLIER') CELERY_TASK_ALWAYS_EAGER = config.get_boolean('POLYAXON_CELERY_ALWAYS_EAGER') if CELERY_TASK_ALWAYS_EAGER: BROKER_TRANSPORT = 'memory' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_IGNORE_RESULT = True CELERY_HARD_TIME_LIMIT_DELAY = config.get_int( 'POLYAXON_CELERY_HARD_TIME_LIMIT_DELAY', is_optional=True, default=180) class Intervals(object):
# -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function from datetime import timedelta from kombu import Exchange, Queue from polyaxon.utils import config CELERY_TRACK_STARTED = True CELERY_BROKER_URL = config.get_string('POLYAXON_AMQP_URL') INTERNAL_EXCHANGE = config.get_string('POLYAXON_INTERNAL_EXCHANGE') # CELERY_RESULT_BACKEND = config.get_string('POLYAXON_REDIS_CELERY_RESULT_BACKEND_URL') CELERYD_PREFETCH_MULTIPLIER = config.get_int( 'POLYAXON_CELERYD_PREFETCH_MULTIPLIER') CELERY_TASK_ALWAYS_EAGER = config.get_boolean('POLYAXON_CELERY_ALWAYS_EAGER') if CELERY_TASK_ALWAYS_EAGER: BROKER_TRANSPORT = 'memory' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' class Intervals(object): """All intervals are in seconds""" EXPERIMENTS_SCHEDULER = config.get_int( 'POLYAXON_INTERVALS_EXPERIMENTS_SCHEDULER', is_optional=True) or 30 EXPERIMENTS_SYNC = config.get_int('POLYAXON_INTERVALS_EXPERIMENTS_SYNC',
'POLYAXON_RABBITMQ_USER', is_optional=True) RABBITMQ_PASSWORD = config.get_string( 'POLYAXON_RABBITMQ_PASSWORD', is_secret=True, is_optional=True) if RABBITMQ_USER and RABBITMQ_PASSWORD: CELERY_BROKER_URL = 'amqp://{user}:{password}@{url}'.format( user=RABBITMQ_USER, password=RABBITMQ_PASSWORD, url=AMQP_URL ) CELERY_BROKER_URL = 'amqp://{url}'.format(url=AMQP_URL) INTERNAL_EXCHANGE = config.get_string('POLYAXON_INTERNAL_EXCHANGE') # CELERY_RESULT_BACKEND = config.get_string('POLYAXON_REDIS_CELERY_RESULT_BACKEND_URL') CELERYD_PREFETCH_MULTIPLIER = config.get_int('POLYAXON_CELERYD_PREFETCH_MULTIPLIER') CELERY_TASK_ALWAYS_EAGER = config.get_boolean('POLYAXON_CELERY_ALWAYS_EAGER') if CELERY_TASK_ALWAYS_EAGER: BROKER_TRANSPORT = 'memory' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' CELERY_IGNORE_RESULT = True CELERY_HARD_TIME_LIMIT_DELAY = config.get_int('POLYAXON_CELERY_HARD_TIME_LIMIT_DELAY', is_optional=True, default=180)
INVITATION_TIMEOUT_DAYS = 30 SESSION_COOKIE_AGE = 24 * 60 * 60 # 24 hours SESSION_COOKIE_HTTPONLY = True DEFAULT_DB_ENGINE = 'django.db.backends.postgresql' DATABASES = { 'default': { 'ENGINE': config.get_string('POLYAXON_DB_ENGINE', is_optional=True) or DEFAULT_DB_ENGINE, 'NAME': config.get_string('POLYAXON_DB_NAME'), 'USER': config.get_string('POLYAXON_DB_USER'), 'PASSWORD': config.get_string('POLYAXON_DB_PASSWORD', is_secret=True), 'HOST': config.get_string('POLYAXON_DB_HOST'), 'PORT': config.get_string('POLYAXON_DB_PORT'), 'ATOMIC_REQUESTS': True, 'CONN_MAX_AGE': config.get_int('POLYAXON_DB_CONN_MAX_AGE', is_optional=True, default=0), } } LIST_TEMPLATE_CONTEXT_PROCESSORS = [ 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'versions.context_processors.versions', 'clusters.context_processors.cluster', 'sso.context_processors.sso_enabled', ]
import urllib3 from kubernetes import client from polyaxon.utils import config POLYAXON_K8S_APP_NAME = config.get_string('POLYAXON_K8S_APP_NAME') POLYAXON_K8S_API_HOST = config.get_string('POLYAXON_K8S_API_HOST') POLYAXON_K8S_API_PORT = config.get_int('POLYAXON_K8S_API_PORT') POLYAXON_K8S_APP_CONFIG_NAME = config.get_string('POLYAXON_K8S_APP_CONFIG_NAME') POLYAXON_K8S_APP_SECRET_NAME = config.get_string('POLYAXON_K8S_APP_SECRET_NAME') POLYAXON_K8S_RABBITMQ_SECRET_NAME = config.get_string('POLYAXON_K8S_RABBITMQ_SECRET_NAME') CLUSTER_ID = config.get_string('POLYAXON_CLUSTER_ID', is_optional=True) K8S_AUTHORISATION = config.get_string('POLYAXON_K8S_AUTHORISATION', is_optional=True, is_secret=True) K8S_HOST = config.get_string('POLYAXON_K8S_HOST', is_optional=True) SSL_CA_CERT = config.get_string('POLYAXON_K8S_SSL_CA_CERT', is_optional=True) K8S_CONFIG = None if K8S_AUTHORISATION and K8S_HOST: K8S_CONFIG = client.Configuration() K8S_CONFIG.api_key['authorization'] = K8S_AUTHORISATION K8S_CONFIG.api_key_prefix['authorization'] = 'Bearer' K8S_CONFIG.host = K8S_HOST if SSL_CA_CERT: K8S_CONFIG.verify_ssl = True K8S_CONFIG.ssl_ca_cert = SSL_CA_CERT else:
APP_LABELS_NOTEBOOK = config.get_string('POLYAXON_APP_LABELS_NOTEBOOK') APP_LABELS_DOCKERIZER = config.get_string('POLYAXON_APP_LABELS_DOCKERIZER') APP_LABELS_EXPERIMENT = config.get_string('POLYAXON_APP_LABELS_EXPERIMENT') APP_LABELS_JOB = config.get_string('POLYAXON_APP_LABELS_JOB') # Selectors NODE_SELECTORS_EXPERIMENTS = config.get_string( 'POLYAXON_NODE_SELECTORS_EXPERIMENTS', is_optional=True) NODE_SELECTORS_CORE = config.get_string( 'POLYAXON_NODE_SELECTORS_CORE', is_optional=True) CONTAINER_NAME_EXPERIMENT_JOB = config.get_string('POLYAXON_CONTAINER_NAME_EXPERIMENT_JOB') CONTAINER_NAME_JOB = config.get_string('POLYAXON_CONTAINER_NAME_JOB') CONTAINER_NAME_SIDECAR = config.get_string('POLYAXON_CONTAINER_NAME_SIDECAR') CONTAINER_NAME_INIT = config.get_string('POLYAXON_CONTAINER_NAME_INIT') CONTAINER_NAME_PLUGIN_JOB = config.get_string('POLYAXON_CONTAINER_NAME_PLUGIN_JOB') CONTAINER_NAME_DOCKERIZER_JOB = config.get_string('POLYAXON_CONTAINER_NAME_DOCKERIZER_JOB') JOB_DOCKER_NAME = config.get_string('POLYAXON_JOB_DOCKER_NAME', is_optional=True, default='polyaxon/polyaxon-lib') JOB_SIDECAR_DOCKER_IMAGE = config.get_string('POLYAXON_JOB_SIDECAR_DOCKER_IMAGE') JOB_INIT_DOCKER_IMAGE = config.get_string('POLYAXON_JOB_INIT_DOCKER_IMAGE', is_optional=True, default='ubuntu:16.04') JOB_DOCKERIZER_IMAGE = config.get_string('POLYAXON_JOB_DOCKERIZER_IMAGE') TENSORBOARD_DOCKER_IMAGE = config.get_string('POLYAXON_TENSORBOARD_DOCKER_IMAGE', is_optional=True, default='tensorflow/tensorflow:1.4.1-py3') JOB_SIDECAR_LOG_SLEEP_INTERVAL = config.get_int('POLYAXON_JOB_SIDECAR_LOG_SLEEP_INTERVAL', is_optional=True)
USE_TZ = True INTERNAL_IPS = ('127.0.0.1',) APPEND_SLASH = True ROOT_URLCONF = 'polyaxon.urls' # user management LOGIN_URL = '/users/login/' LOGOUT_REDIRECT_URL = LOGIN_URL LOGIN_REDIRECT_URL = '/' ACCOUNT_ACTIVATION_DAYS = 7 INVITATION_TIMEOUT_DAYS = 30 SESSION_COOKIE_AGE = 24 * 60 * 60 # 24 hours SESSION_COOKIE_HTTPONLY = True DEFAULT_DB_ENGINE = 'django.db.backends.postgresql' DATABASES = { 'default': { 'ENGINE': config.get_string('POLYAXON_DB_ENGINE', is_optional=True) or DEFAULT_DB_ENGINE, 'NAME': config.get_string('POLYAXON_DB_NAME'), 'USER': config.get_string('POLYAXON_DB_USER'), 'PASSWORD': config.get_string('POLYAXON_DB_PASSWORD', is_secret=True), 'HOST': config.get_string('POLYAXON_DB_HOST'), 'PORT': config.get_string('POLYAXON_DB_PORT'), 'ATOMIC_REQUESTS': True, 'CONN_MAX_AGE': config.get_int('POLYAXON_DB_CONN_MAX_AGE', is_optional=True, default=0), } }
# -*- coding: utf-8 -*- from __future__ import absolute_import, division, print_function import urllib3 from kubernetes import client from polyaxon.utils import config K8S_NAMESPACE = config.get_string('POLYAXON_K8S_NAMESPACE') K8S_NODE_NAME = config.get_string('POLYAXON_K8S_NODE_NAME') POLYAXON_K8S_APP_NAME = config.get_string('POLYAXON_K8S_APP_NAME') POLYAXON_K8S_API_HOST = config.get_string('POLYAXON_K8S_API_HOST') POLYAXON_K8S_API_PORT = config.get_int('POLYAXON_K8S_API_PORT') POLYAXON_K8S_APP_CONFIG_NAME = config.get_string( 'POLYAXON_K8S_APP_CONFIG_NAME') POLYAXON_K8S_APP_SECRET_NAME = config.get_string( 'POLYAXON_K8S_APP_SECRET_NAME') CLUSTER_ID = config.get_string('POLYAXON_CLUSTER_ID', is_optional=True) K8S_AUTHORISATION = config.get_string('POLYAXON_K8S_AUTHORISATION', is_optional=True, is_secret=True) K8S_HOST = config.get_string('POLYAXON_K8S_HOST', is_optional=True) SSL_CA_CERT = config.get_string('POLYAXON_K8S_SSL_CA_CERT', is_optional=True) K8S_CONFIG = None if K8S_AUTHORISATION and K8S_HOST: K8S_CONFIG = client.Configuration() K8S_CONFIG.api_key['authorization'] = K8S_AUTHORISATION K8S_CONFIG.api_key_prefix['authorization'] = 'Bearer' K8S_CONFIG.host = K8S_HOST
from polyaxon.utils import config REGISTRATION_SUPERUSER_VALIDATION_WORKFLOW = '0' EMAIL_VALIDATION_WORKFLOW = '1' REGISTRATION_WORKFLOW = REGISTRATION_SUPERUSER_VALIDATION_WORKFLOW USERS_MINIMUM_PASSWORD_LENGTH = config.get_int('POLYAXON_PASSWORD_LENGTH') AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': { 'min_length': USERS_MINIMUM_PASSWORD_LENGTH, } }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ]
from polyaxon.utils import config email_from = config.get_string('POLYAXON_EMAIL_FROM') email_host = config.get_string('POLYAXON_EMAIL_HOST') email_port = config.get_int('POLYAXON_EMAIL_PORT') email_host_user = config.get_string('POLYAXON_EMAIL_HOST_USER', is_optional=True) email_host_password = config.get_string('POLYAXON_EMAIL_HOST_PASSWORD', is_optional=True, is_secret=True) EMAIL_BACKEND = config.get_string('POLYAXON_EMAIL_BACKEND', is_optional=True, default='django.core.mail.backends.console.EmailBackend')