You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by lf...@apache.org on 2022/07/12 13:02:38 UTC
[incubator-datalab] 01/02: [DATALAB-2890] superset version update changes
This is an automated email from the ASF dual-hosted git repository.
lfrolov pushed a commit to branch DATALAB-2890
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git
commit feb2575a7bdb8eeb7e31a991e43d273c4729bbb0
Author: leonidfrolov <fr...@gmail.com>
AuthorDate: Tue Jul 12 12:47:36 2022 +0300
[DATALAB-2890] superset version update changes
---
.../src/general/conf/datalab.ini | 2 +-
.../src/general/lib/os/fab.py | 24 ++--
.../src/general/scripts/os/superset_start.py | 4 +-
.../templates/os/debian/superset-notebook.service | 2 +-
.../src/superset/templates/docker-compose.yml | 148 ++++++++++++++++-----
.../src/superset/templates/docker-init.sh | 58 ++++++--
.../templates/keycloak_security_manager.py | 71 ++++++++++
.../src/superset/templates/requirements-extra.txt | 1 +
.../src/superset/templates/superset_config.py | 103 ++++++++++----
9 files changed, 334 insertions(+), 79 deletions(-)
diff --git a/infrastructure-provisioning/src/general/conf/datalab.ini b/infrastructure-provisioning/src/general/conf/datalab.ini
index 0b5277b52..f6c4e92a8 100644
--- a/infrastructure-provisioning/src/general/conf/datalab.ini
+++ b/infrastructure-provisioning/src/general/conf/datalab.ini
@@ -357,7 +357,7 @@ matplotlib_version = 3.3.4
### JupyterLab image
jupyterlab_image = odahu\/base-notebook:1.1.0-rc8
### Superset version
-superset_version = 0.35.1
+superset_version = 1.5.1
### GCS-connector version
gcs_connector_version = 2.0.1
### Setuptools version
diff --git a/infrastructure-provisioning/src/general/lib/os/fab.py b/infrastructure-provisioning/src/general/lib/os/fab.py
index add3157c3..eac1b2fa5 100644
--- a/infrastructure-provisioning/src/general/lib/os/fab.py
+++ b/infrastructure-provisioning/src/general/lib/os/fab.py
@@ -1319,18 +1319,17 @@ def configure_superset(os_user, keycloak_auth_server_url, keycloak_realm_name, k
keycloak_client_secret, edge_instance_private_ip, edge_instance_public_ip, superset_name):
logging.info('Superset configuring')
try:
- if not exists(conn, '/home/{}/incubator-superset'.format(os_user)):
+ if not exists(conn, '/home/{}/superset'.format(os_user)):
conn.sudo(
'''bash -c 'cd /home/{} && wget https://github.com/apache/incubator-superset/archive/{}.tar.gz' '''.format(
os_user, os.environ['notebook_superset_version']))
conn.sudo('''bash -c 'cd /home/{} && tar -xzf {}.tar.gz' '''.format(os_user, os.environ[
'notebook_superset_version']))
- conn.sudo('''bash -c 'cd /home/{} && ln -sf incubator-superset-{} incubator-superset' '''.format(os_user,
- os.environ[
- 'notebook_superset_version']))
+ conn.sudo('''bash -c 'cd /home/{} && ln -sf superset-{} superset' '''.format(os_user,
+ os.environ['notebook_superset_version']))
if not exists(conn, '/tmp/superset-notebook_installed'):
conn.sudo('mkdir -p /opt/datalab/templates')
- conn.local('cd /root/templates; tar -zcvf /tmp/templates.tar.gz *')
+ conn.local('cd /root/templates; tar -zcvf /tmp/templates.tar.gz .')
conn.put('/tmp/templates.tar.gz', '/tmp/templates.tar.gz')
conn.sudo('tar -zxvf /tmp/templates.tar.gz -C /opt/datalab/templates')
conn.sudo('sed -i \'s/OS_USER/{}/g\' /opt/datalab/templates/.env'.format(os_user))
@@ -1350,20 +1349,23 @@ def configure_superset(os_user, keycloak_auth_server_url, keycloak_realm_name, k
conn.sudo(
'sed -i \'s/EDGE_IP/{}/g\' /opt/datalab/templates/superset_config.py'.format(edge_instance_public_ip))
conn.sudo('sed -i \'s/SUPERSET_NAME/{}/g\' /opt/datalab/templates/superset_config.py'.format(superset_name))
- conn.sudo('cp -f /opt/datalab/templates/.env /home/{}/incubator-superset/contrib/docker/'.format(os_user))
+ conn.sudo('cp -f /opt/datalab/templates/.env /home/{}/superset/docker/'.format(os_user))
conn.sudo(
- 'cp -f /opt/datalab/templates/docker-compose.yml /home/{}/incubator-superset/contrib/docker/'.format(
+ 'cp -f /opt/datalab/templates/docker-compose.yml /home/{}/superset/'.format(
os_user))
conn.sudo(
- 'cp -f /opt/datalab/templates/id_provider.json /home/{}/incubator-superset/contrib/docker/'.format(
+ 'cp -f /opt/datalab/templates/id_provider.json /home/{}/superset/docker/'.format(
os_user))
conn.sudo(
- 'cp -f /opt/datalab/templates/requirements-extra.txt /home/{}/incubator-superset/contrib/docker/'.format(
+ 'cp -f /opt/datalab/templates/requirements-extra.txt /home/{}/superset/requirements/'.format(
os_user))
conn.sudo(
- 'cp -f /opt/datalab/templates/superset_config.py /home/{}/incubator-superset/contrib/docker/'.format(
+ 'cp -f /opt/datalab/templates/superset_config.py /home/{}/superset/docker/pythonpath_dev/'.format(
os_user))
- conn.sudo('cp -f /opt/datalab/templates/docker-init.sh /home/{}/incubator-superset/contrib/docker/'.format(
+ conn.sudo(
+ 'cp -f /opt/datalab/templates/keycloak_security_manager.py /home/{}/superset/docker/pythonpath_dev/'.format(
+ os_user))
+ conn.sudo('cp -f /opt/datalab/templates/docker-init.sh /home/{}/superset/docker/'.format(
os_user))
conn.sudo('touch /tmp/superset-notebook_installed')
except Exception as err:
diff --git a/infrastructure-provisioning/src/general/scripts/os/superset_start.py b/infrastructure-provisioning/src/general/scripts/os/superset_start.py
index 9f976ae8d..924512883 100644
--- a/infrastructure-provisioning/src/general/scripts/os/superset_start.py
+++ b/infrastructure-provisioning/src/general/scripts/os/superset_start.py
@@ -33,11 +33,11 @@ parser.add_argument('--keyfile', type=str, default='')
parser.add_argument('--os_user', type=str, default='')
args = parser.parse_args()
-superset_dir = '/home/' + args.os_user + '/incubator-superset/contrib/docker'
+superset_dir = '/home/' + args.os_user + '/superset'
def start_superset(superset_dir):
try:
- conn.sudo('''bash -c 'cd {} && docker-compose run --rm superset ./docker-init.sh' '''.format(superset_dir))
+ conn.sudo('''bash -c 'cd {} && docker-compose run --rm superset docker/docker-init.sh' '''.format(superset_dir))
conn.sudo('cp /opt/datalab/templates/superset-notebook.service /tmp/')
conn.sudo('sed -i \'s/OS_USER/{}/g\' /tmp/superset-notebook.service'.format(args.os_user))
conn.sudo('cp /tmp/superset-notebook.service /etc/systemd/system/')
diff --git a/infrastructure-provisioning/src/general/templates/os/debian/superset-notebook.service b/infrastructure-provisioning/src/general/templates/os/debian/superset-notebook.service
index ef3b4bf14..064a8b777 100644
--- a/infrastructure-provisioning/src/general/templates/os/debian/superset-notebook.service
+++ b/infrastructure-provisioning/src/general/templates/os/debian/superset-notebook.service
@@ -28,7 +28,7 @@ User=OS_USER
Group=OS_USER
ExecStart=/usr/bin/sudo docker-compose up
ExecStop=/usr/bin/sudo docker-compose stop
-WorkingDirectory=/home/OS_USER/incubator-superset/contrib/docker
+WorkingDirectory=/home/OS_USER/superset
TimeoutStopSec=120
Restart=on-failure
RestartSec=10
diff --git a/infrastructure-provisioning/src/superset/templates/docker-compose.yml b/infrastructure-provisioning/src/superset/templates/docker-compose.yml
index 78283cb67..5fe5609c8 100644
--- a/infrastructure-provisioning/src/superset/templates/docker-compose.yml
+++ b/infrastructure-provisioning/src/superset/templates/docker-compose.yml
@@ -14,18 +14,34 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-version: '2'
+x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
+x-superset-user: &superset-user root
+x-superset-depends-on: &superset-depends-on
+ - db
+ - redis
+x-superset-volumes: &superset-volumes
+ # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
+ - ./docker:/app/docker
+ - ./superset:/app/superset
+ - ./superset-frontend:/app/superset-frontend
+ - superset_home:/app/superset_home
+ - ./tests:/app/tests
+
+version: "3.7"
services:
redis:
- image: redis:3.2
+ image: redis:latest
+ container_name: superset_cache
restart: unless-stopped
ports:
- "127.0.0.1:6379:6379"
volumes:
- redis:/data
- postgres:
- image: postgres:10
+ db:
+ env_file: docker/.env
+ image: postgres:14
+ container_name: superset_db
restart: unless-stopped
environment:
POSTGRES_DB: superset
@@ -34,44 +50,112 @@ services:
ports:
- "127.0.0.1:5432:5432"
volumes:
- - postgres:/var/lib/postgresql/data
+ - db_home:/var/lib/postgresql/data
superset:
- build:
- context: ../../
- dockerfile: contrib/docker/Dockerfile
+ env_file: docker/.env
+ image: *superset-image
+ container_name: superset_app
+ command: ["/app/docker/docker-bootstrap.sh", "app"]
restart: unless-stopped
- environment:
- POSTGRES_DB: superset
- POSTGRES_USER: superset
- POSTGRES_PASSWORD: superset
- POSTGRES_HOST: postgres
- POSTGRES_PORT: 5432
- REDIS_HOST: redis
- REDIS_PORT: 6379
- USERNAME_OIDC_FIELD: preferred_username
- FIRST_NAME_OIDC_FIELD: given_name
- LAST_NAME_OIDC_FIELD: family_name
- http_proxy: http://PROXY_STRING
- https_proxy: http://PROXY_STRING
- # If using production, comment development volume below
- SUPERSET_ENV: production
- #SUPERSET_ENV: development
- user: root:root
ports:
- 8088:8088
+ user: *superset-user
+ depends_on: *superset-depends-on
+ volumes: *superset-volumes
+ environment:
+ CYPRESS_CONFIG: "${CYPRESS_CONFIG}"
+
+ superset-websocket:
+ container_name: superset_websocket
+ build: ./superset-websocket
+ image: superset-websocket
+ ports:
+ - 8080:8080
depends_on:
- - postgres
- redis
+ # Mount everything in superset-websocket into container and
+ # then exclude node_modules and dist with bogus volume mount.
+ # This is necessary because host and container need to have
+ # their own, separate versions of these files. .dockerignore
+ # does not seem to work when starting the service through
+ # docker-compose.
+ #
+ # For example, node_modules may contain libs with native bindings.
+ # Those bindings need to be compiled for each OS and the container
+ # OS is not necessarily the same as host OS.
volumes:
- # this is needed to communicate with the postgres and redis services
- - ./superset_config.py:/home/superset/superset/superset_config.py
- # this is needed for development, remove with SUPERSET_ENV=production
- #- ../../superset:/home/superset/superset
- - ./id_provider.json:/home/superset/superset/id_provider.json
+ - ./superset-websocket:/home/superset-websocket
+ - /home/superset-websocket/node_modules
+ - /home/superset-websocket/dist
+ environment:
+ - PORT=8080
+ - REDIS_HOST=redis
+ - REDIS_PORT=6379
+ - REDIS_SSL=false
+
+ superset-init:
+ image: *superset-image
+ container_name: superset_init
+ command: ["/app/docker/docker-init.sh"]
+ env_file: docker/.env
+ depends_on: *superset-depends-on
+ user: *superset-user
+ volumes: *superset-volumes
+ environment:
+ CYPRESS_CONFIG: "${CYPRESS_CONFIG}"
+
+ superset-node:
+ image: node:16
+ container_name: superset_node
+ command: ["/app/docker/docker-frontend.sh"]
+ env_file: docker/.env
+ depends_on: *superset-depends-on
+ volumes: *superset-volumes
+
+ superset-worker:
+ image: *superset-image
+ container_name: superset_worker
+ command: ["/app/docker/docker-bootstrap.sh", "worker"]
+ env_file: docker/.env
+ restart: unless-stopped
+ depends_on: *superset-depends-on
+ user: *superset-user
+ volumes: *superset-volumes
+ # Bump memory limit if processing selenium / thumbnails on superset-worker
+ # mem_limit: 2038m
+ # mem_reservation: 128M
+
+ superset-worker-beat:
+ image: *superset-image
+ container_name: superset_worker_beat
+ command: ["/app/docker/docker-bootstrap.sh", "beat"]
+ env_file: docker/.env
+ restart: unless-stopped
+ depends_on: *superset-depends-on
+ user: *superset-user
+ volumes: *superset-volumes
+
+ superset-tests-worker:
+ image: *superset-image
+ container_name: superset_tests_worker
+ command: ["/app/docker/docker-bootstrap.sh", "worker"]
+ env_file: docker/.env
+ environment:
+ DATABASE_HOST: localhost
+ DATABASE_DB: test
+ REDIS_CELERY_DB: 2
+ REDIS_RESULTS_DB: 3
+ REDIS_HOST: localhost
+ network_mode: host
+ depends_on: *superset-depends-on
+ user: *superset-user
+ volumes: *superset-volumes
volumes:
- postgres:
+ superset_home:
+ external: false
+ db_home:
external: false
redis:
external: false
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/superset/templates/docker-init.sh b/infrastructure-provisioning/src/superset/templates/docker-init.sh
index 11b682a91..d5c5d8820 100644
--- a/infrastructure-provisioning/src/superset/templates/docker-init.sh
+++ b/infrastructure-provisioning/src/superset/templates/docker-init.sh
@@ -15,19 +15,59 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-set -ex
+set -e
-# Create an admin user (you will be prompted to set username, first and last name before setting a password)
-export FLASK_APP=superset:app
-#flask fab create-admin --username admin --firstname admin --lastname admin --password admin
+#
+# Always install local overrides first
+#
+/app/docker/docker-bootstrap.sh
-# Initialize the database
-superset db upgrade
+STEP_CNT=4
-if [ "$SUPERSET_LOAD_EXAMPLES" = "yes" ]; then
- # Load some data to play with
- superset load_examples
+echo_step() {
+cat <<EOF
+######################################################################
+Init Step ${1}/${STEP_CNT} [${2}] -- ${3}
+######################################################################
+EOF
+}
+ADMIN_PASSWORD="admin"
+# If Cypress run – overwrite the password for admin and export env variables
+if [ "$CYPRESS_CONFIG" == "true" ]; then
+ ADMIN_PASSWORD="general"
+ export SUPERSET_CONFIG=tests.integration_tests.superset_test_config
+ export SUPERSET_TESTENV=true
+ export ENABLE_REACT_CRUD_VIEWS=true
+ export SUPERSET__SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://superset:superset@db:5432/superset
fi
+# Initialize the database
+echo_step "1" "Starting" "Applying DB migrations"
+superset db upgrade
+echo_step "1" "Complete" "Applying DB migrations"
+# Create an admin user
+echo_step "2" "Starting" "Setting up admin user ( admin / $ADMIN_PASSWORD )"
+superset fab create-admin \
+ --username admin \
+ --firstname Superset \
+ --lastname Admin \
+ --email admin@superset.com \
+ --password $ADMIN_PASSWORD
+echo_step "2" "Complete" "Setting up admin user"
# Create default roles and permissions
+echo_step "3" "Starting" "Setting up roles and perms"
superset init
+echo_step "3" "Complete" "Setting up roles and perms"
+
+if [ "$SUPERSET_LOAD_EXAMPLES" = "yes" ]; then
+ # Load some data to play with
+ echo_step "4" "Starting" "Loading examples"
+ # If Cypress run which consumes superset_test_config – load required data for tests
+ if [ "$CYPRESS_CONFIG" == "true" ]; then
+ superset load_test_users
+ superset load_examples --load-test-data
+ else
+ superset load_examples
+ fi
+ echo_step "4" "Complete" "Loading examples"
+fi
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/superset/templates/keycloak_security_manager.py b/infrastructure-provisioning/src/superset/templates/keycloak_security_manager.py
new file mode 100644
index 000000000..c7aee93db
--- /dev/null
+++ b/infrastructure-provisioning/src/superset/templates/keycloak_security_manager.py
@@ -0,0 +1,71 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+#
+# This file is included in the final Docker image and SHOULD be overridden when
+# deploying the image to prod. Settings configured here are intended for use in local
+# development environments. Also note that superset_config_docker.py is imported
+# as a final step as a means to override "defaults" configured here
+#
+
+from flask_appbuilder.security.manager import AUTH_OID
+from superset.security import SupersetSecurityManager
+from flask_oidc import OpenIDConnect
+from flask_appbuilder.security.views import AuthOIDView
+from flask_login import login_user
+from urllib.parse import quote
+from flask_appbuilder.views import ModelView, SimpleFormView, expose
+import logging
+
+class OIDCSecurityManager(SupersetSecurityManager):
+
+ def __init__(self, appbuilder):
+ super(OIDCSecurityManager, self).__init__(appbuilder)
+ if self.auth_type == AUTH_OID:
+ self.oid = OpenIDConnect(self.appbuilder.get_app)
+ self.authoidview = AuthOIDCView
+
+class AuthOIDCView(AuthOIDView):
+
+ @expose('/login/', methods=['GET', 'POST'])
+ def login(self, flag=True):
+ sm = self.appbuilder.sm
+ oidc = sm.oid
+
+ @self.appbuilder.sm.oid.require_login
+ def handle_login():
+ user = sm.auth_user_oid(oidc.user_getfield('email'))
+
+ if user is None:
+ info = oidc.user_getinfo(['preferred_username', 'given_name', 'family_name', 'email'])
+ user = sm.add_user(info.get('preferred_username'), info.get('given_name'), info.get('family_name'),
+ info.get('email'), sm.find_role('Gamma'))
+
+ login_user(user, remember=False)
+ return redirect(self.appbuilder.get_url_for_index)
+
+ return handle_login()
+
+ @expose('/logout/', methods=['GET', 'POST'])
+ def logout(self):
+ oidc = self.appbuilder.sm.oid
+
+ oidc.logout()
+ super(AuthOIDCView, self).logout()
+ redirect_url = request.url_root.strip('/') + self.appbuilder.get_url_for_login
+
+ return redirect(
+ oidc.client_secrets.get('issuer') + '/protocol/openid-connect/logout?redirect_uri=' + quote(redirect_url))
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/superset/templates/requirements-extra.txt b/infrastructure-provisioning/src/superset/templates/requirements-extra.txt
index 6b6dcd72f..f337a34fb 100644
--- a/infrastructure-provisioning/src/superset/templates/requirements-extra.txt
+++ b/infrastructure-provisioning/src/superset/templates/requirements-extra.txt
@@ -17,3 +17,4 @@
gevent==1.4.0
fab-oidc
pybigquery
+flask-oidc==1.3.0
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/superset/templates/superset_config.py b/infrastructure-provisioning/src/superset/templates/superset_config.py
index b8830af3e..f30a043f4 100644
--- a/infrastructure-provisioning/src/superset/templates/superset_config.py
+++ b/infrastructure-provisioning/src/superset/templates/superset_config.py
@@ -14,11 +14,26 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
+#
+# This file is included in the final Docker image and SHOULD be overridden when
+# deploying the image to prod. Settings configured here are intended for use in local
+# development environments. Also note that superset_config_docker.py is imported
+# as a final step as a means to override "defaults" configured here
+#
+import logging
+import os
+from datetime import timedelta
+from typing import Optional
+from keycloak_security_manager import OIDCSecurityManager
+from flask_appbuilder.security.manager import AUTH_OID, AUTH_REMOTE_USER, AUTH_DB, AUTH_LDAP, AUTH_OAUTH
import os
-from fab_oidc.security import SupersetOIDCSecurityManager
-from flask_appbuilder.security.manager import AUTH_OID
+from cachelib.file import FileSystemCache
+from celery.schedules import crontab
-def get_env_variable(var_name, default=None):
+logger = logging.getLogger()
+
+
+def get_env_variable(var_name: str, default: Optional[str] = None) -> str:
"""Get the environment variable or raise exception."""
try:
return os.environ[var_name]
@@ -26,43 +41,85 @@ def get_env_variable(var_name, default=None):
if default is not None:
return default
else:
- error_msg = 'The environment variable {} was missing, abort...'\
- .format(var_name)
+ error_msg = "The environment variable {} was missing, abort...".format(
+ var_name
+ )
raise EnvironmentError(error_msg)
-POSTGRES_USER = get_env_variable('POSTGRES_USER')
-POSTGRES_PASSWORD = get_env_variable('POSTGRES_PASSWORD')
-POSTGRES_HOST = get_env_variable('POSTGRES_HOST')
-POSTGRES_PORT = get_env_variable('POSTGRES_PORT')
-POSTGRES_DB = get_env_variable('POSTGRES_DB')
+DATABASE_DIALECT = get_env_variable("DATABASE_DIALECT")
+DATABASE_USER = get_env_variable("DATABASE_USER")
+DATABASE_PASSWORD = get_env_variable("DATABASE_PASSWORD")
+DATABASE_HOST = get_env_variable("DATABASE_HOST")
+DATABASE_PORT = get_env_variable("DATABASE_PORT")
+DATABASE_DB = get_env_variable("DATABASE_DB")
# The SQLAlchemy connection string.
-SQLALCHEMY_DATABASE_URI = 'postgresql://%s:%s@%s:%s/%s' % (POSTGRES_USER,
- POSTGRES_PASSWORD,
- POSTGRES_HOST,
- POSTGRES_PORT,
- POSTGRES_DB)
+SQLALCHEMY_DATABASE_URI = "%s://%s:%s@%s:%s/%s" % (
+ DATABASE_DIALECT,
+ DATABASE_USER,
+ DATABASE_PASSWORD,
+ DATABASE_HOST,
+ DATABASE_PORT,
+ DATABASE_DB,
+)
+
+REDIS_HOST = get_env_variable("REDIS_HOST")
+REDIS_PORT = get_env_variable("REDIS_PORT")
+REDIS_CELERY_DB = get_env_variable("REDIS_CELERY_DB", "0")
+REDIS_RESULTS_DB = get_env_variable("REDIS_RESULTS_DB", "1")
-REDIS_HOST = get_env_variable('REDIS_HOST')
-REDIS_PORT = get_env_variable('REDIS_PORT')
+RESULTS_BACKEND = FileSystemCache("/app/superset_home/sqllab")
class CeleryConfig(object):
- BROKER_URL = 'redis://%s:%s/0' % (REDIS_HOST, REDIS_PORT)
- CELERY_IMPORTS = ('superset.sql_lab', )
- CELERY_RESULT_BACKEND = 'redis://%s:%s/1' % (REDIS_HOST, REDIS_PORT)
- CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}}
- CELERY_TASK_PROTOCOL = 1
+ BROKER_URL = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}"
+ CELERY_IMPORTS = ("superset.sql_lab", "superset.tasks")
+ CELERY_RESULT_BACKEND = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_RESULTS_DB}"
+ CELERYD_LOG_LEVEL = "DEBUG"
+ CELERYD_PREFETCH_MULTIPLIER = 1
+ CELERY_ACKS_LATE = False
+ CELERYBEAT_SCHEDULE = {
+ "reports.scheduler": {
+ "task": "reports.scheduler",
+ "schedule": crontab(minute="*", hour="*"),
+ },
+ "reports.prune_log": {
+ "task": "reports.prune_log",
+ "schedule": crontab(minute=10, hour=0),
+ },
+ }
CELERY_CONFIG = CeleryConfig
+FEATURE_FLAGS = {"ALERT_REPORTS": True}
+ALERT_REPORTS_NOTIFICATION_DRY_RUN = True
+WEBDRIVER_BASEURL = "http://superset:8088/"
+# The base URL for the email report hyperlinks.
+WEBDRIVER_BASEURL_USER_FRIENDLY = WEBDRIVER_BASEURL
+
+SQLLAB_CTAS_NO_LIMIT = True
+
+#
+# Optionally import superset_config_docker.py (which will have been included on
+# the PYTHONPATH) in order to allow for local settings to be overridden
+#
+try:
+ import superset_config_docker
+ from superset_config_docker import * # noqa
+
+ logger.info(
+ f"Loaded your Docker configuration at " f"[{superset_config_docker.__file__}]"
+ )
+except ImportError:
+ logger.info("Using default Docker config...")
+
AUTH_TYPE = AUTH_OID
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = "Admin"
CUSTOM_SECURITY_MANAGER = SupersetOIDCSecurityManager
-OIDC_CLIENT_SECRETS = '/home/superset/superset/id_provider.json'
+OIDC_CLIENT_SECRETS = '/home/datalab-user/superset/docker/id_provider.json'
OIDC_COOKIE_SECURE = False
OIDC_VALID_ISSUERS = 'KEYCLOAK_AUTH_SERVER_URL/realms/KEYCLOAK_REALM_NAME'
WTF_CSRF_ENABLED = False
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org