mysqloperator/controller/config.py (75 lines of code) (raw):
# Copyright (c) 2020, 2025, Oracle and/or its affiliates.
#
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
#
from mysqloperator.controller.api_utils import Edition, ImagePullPolicy
from .kubeutils import k8s_version
import os
import pkg_resources
debug = False
#enable_mysqld_general_log = False
_pull_policy = os.getenv("MYSQL_OPERATOR_IMAGE_PULL_POLICY")
if _pull_policy:
default_image_pull_policy = ImagePullPolicy[_pull_policy]
else:
default_image_pull_policy = ImagePullPolicy.Always
_edition = os.getenv("MYSQL_OPERATOR_ENTERPRISE")
if _edition:
OPERATOR_EDITION = Edition.enterprise
else:
OPERATOR_EDITION = Edition.community
# Constants
OPERATOR_VERSION = "2.2.4"
OPERATOR_EDITION_NAME_TO_ENUM = { edition.value : edition.name for edition in Edition }
DEFAULT_VERSION_TAG = "9.3.0"
MIN_BASE_SERVER_ID = 1
MAX_BASE_SERVER_ID = 4000000000
SHELL_VERSION = DEFAULT_VERSION_TAG
DEFAULT_SERVER_VERSION_TAG = DEFAULT_VERSION_TAG
MIN_SUPPORTED_MYSQL_VERSION = "8.0.28"
MAX_SUPPORTED_MYSQL_VERSION = DEFAULT_VERSION_TAG
DISABLED_MYSQL_VERSION = {
"8.0.29": "Support for MySQL 8.0.29 is disabled. Please see https://dev.mysql.com/doc/relnotes/mysql-operator/en/news-8-0-29.html"
}
DEFAULT_ROUTER_VERSION_TAG = DEFAULT_VERSION_TAG
# This is used for the sidecar. The operator version is deploy-operator.yaml
DEFAULT_OPERATOR_VERSION_TAG = f"{DEFAULT_VERSION_TAG}-{OPERATOR_VERSION}"
DEFAULT_IMAGE_REPOSITORY = os.getenv(
"MYSQL_OPERATOR_DEFAULT_REPOSITORY", default="container-registry.oracle.com/mysql").rstrip('/')
MYSQL_SERVER_IMAGE = "community-server"
MYSQL_ROUTER_IMAGE = "community-router"
MYSQL_OPERATOR_IMAGE = "community-operator"
MYSQL_SERVER_EE_IMAGE = "enterprise-server"
MYSQL_ROUTER_EE_IMAGE = "enterprise-router"
MYSQL_OPERATOR_EE_IMAGE = "enterprise-operator"
CLUSTER_ADMIN_USER_NAME = "mysqladmin"
ROUTER_METADATA_USER_NAME = "mysqlrouter"
BACKUP_USER_NAME = "mysqlbackup"
def log_config_banner(logger) -> None:
logger.info(f"KUBERNETES_VERSION ={k8s_version()}")
logger.info(f"OPERATOR_VERSION ={OPERATOR_VERSION}")
logger.info(f"OPERATOR_EDITION ={OPERATOR_EDITION.value}")
logger.info(f"OPERATOR_EDITIONS ={list(OPERATOR_EDITION_NAME_TO_ENUM)}")
logger.info(f"SHELL_VERSION ={SHELL_VERSION}")
logger.info(f"DEFAULT_VERSION_TAG={DEFAULT_VERSION_TAG}")
logger.info(f"SIDECAR_VERSION_TAG={DEFAULT_OPERATOR_VERSION_TAG}")
logger.info(f"DEFAULT_IMAGE_REPOSITORY ={DEFAULT_IMAGE_REPOSITORY}")
for dist in pkg_resources.working_set:
pkg = str(dist).split(" ")
logger.info(f"{pkg[0]:20} = {pkg[1]:10}")
def config_from_env() -> None:
import mysqlsh
global debug
# global enable_mysqld_general_log
global default_image_pull_policy
level = os.getenv("MYSQL_OPERATOR_DEBUG")
if level:
level = int(level)
if level > 0:
debug = level
# enable_mysqld_general_log = True
if level > 4:
mysqlsh.globals.shell.options.logLevel = 8
mysqlsh.globals.shell.options.verbose = 3
mysqlsh.globals.shell.options["dba.logSql"] = 2
elif level > 3:
mysqlsh.globals.shell.options.logLevel = 7
mysqlsh.globals.shell.options.verbose = 2
mysqlsh.globals.shell.options["dba.logSql"] = 2
elif level > 1:
mysqlsh.globals.shell.options.logLevel = 7
mysqlsh.globals.shell.options.verbose = 1
mysqlsh.globals.shell.options["dba.logSql"] = 1
else:
mysqlsh.globals.shell.options.logLevel = 6