diff --git a/docker/runtime/doris-compose/cluster.py b/docker/runtime/doris-compose/cluster.py index 7013c710bea7d7..f28ee157e7107a 100644 --- a/docker/runtime/doris-compose/cluster.py +++ b/docker/runtime/doris-compose/cluster.py @@ -453,6 +453,16 @@ def docker_env(self): elif self.node_type() == Node.TYPE_BE: envs["LLVM_PROFILE_FILE_PREFIX"] = outfile + user_envs = getattr(self.cluster, "env", []) + if user_envs: + for env in user_envs: + pos = env.find('=') + if pos == -1: + raise Exception( + f"env '{env}' error format, should be like 'name=value'" + ) + envs[env[:pos]] = env[pos + 1:] + return envs def entrypoint(self): @@ -885,7 +895,7 @@ class Cluster(object): def __init__(self, name, subnet, image, is_cloud, is_root_user, fe_config, be_config, ms_config, recycle_config, remote_master_fe, local_network_ip, fe_follower, be_disks, be_cluster, reg_be, - extra_hosts, coverage_dir, cloud_store_config, + extra_hosts, env, coverage_dir, cloud_store_config, sql_mode_node_mgr, be_metaservice_endpoint, be_cluster_id, tde_ak, tde_sk, tde_aws_ak, tde_aws_sk, tde_aliyun_ak, tde_aliyun_sk, external_ms_cluster, instance_id, cluster_snapshot="", @@ -906,6 +916,7 @@ def __init__(self, name, subnet, image, is_cloud, is_root_user, fe_config, self.be_cluster = be_cluster self.reg_be = reg_be self.extra_hosts = extra_hosts + self.env = env self.coverage_dir = coverage_dir self.cloud_store_config = cloud_store_config self.external_ms_cluster = external_ms_cluster @@ -936,7 +947,7 @@ def __init__(self, name, subnet, image, is_cloud, is_root_user, fe_config, @staticmethod def new(name, image, is_cloud, is_root_user, fe_config, be_config, ms_config, recycle_config, remote_master_fe, local_network_ip, - fe_follower, be_disks, be_cluster, reg_be, extra_hosts, + fe_follower, be_disks, be_cluster, reg_be, extra_hosts, env, coverage_dir, cloud_store_config, sql_mode_node_mgr, be_metaservice_endpoint, be_cluster_id, tde_ak, tde_sk, tde_aws_ak, tde_aws_sk, tde_aliyun_ak, tde_aliyun_sk, @@ -953,7 +964,7 @@ def new(name, image, is_cloud, is_root_user, fe_config, be_config, cluster = Cluster(name, subnet, image, is_cloud, is_root_user, fe_config, be_config, ms_config, recycle_config, remote_master_fe, local_network_ip, fe_follower, - be_disks, be_cluster, reg_be, extra_hosts, + be_disks, be_cluster, reg_be, extra_hosts, env, coverage_dir, cloud_store_config, sql_mode_node_mgr, be_metaservice_endpoint, be_cluster_id, tde_ak, tde_sk, tde_aws_ak, tde_aws_sk, diff --git a/docker/runtime/doris-compose/command.py b/docker/runtime/doris-compose/command.py index a0181edec91fb7..03bcc7552462db 100644 --- a/docker/runtime/doris-compose/command.py +++ b/docker/runtime/doris-compose/command.py @@ -438,6 +438,15 @@ def add_parser(self, args_parsers): "Add custom host-to-IP mappings (host:ip). For example: --extra-hosts myhost1:192.168.10.1 myhost2:192.168.10.2 . Only use when creating new cluster." ) + parser.add_argument( + "--env", + nargs="*", + type=str, + default=[], + help= + "Add environment variables. For example: --env KEY1=VALUE1 KEY2=VALUE2. Only use when creating new cluster." + ) + parser.add_argument( "--cloud-config", nargs="*", @@ -679,15 +688,16 @@ def run(self, args): instance_id = getattr(args, 'instance_id', None) cluster_snapshot = getattr(args, 'cluster_snapshot', '') + env = getattr(args, 'env', []) or [] enable_storage_vault = CLUSTER.is_true( - CLUSTER.get_env_value(args.env, "ENABLE_STORAGE_VAULT")) + CLUSTER.get_env_value(env, "ENABLE_STORAGE_VAULT")) cluster = CLUSTER.Cluster.new( args.NAME, args.IMAGE, args.cloud, args.root, args.fe_config, args.be_config, args.ms_config, args.recycle_config, args.remote_master_fe, args.local_network_ip, args.fe_follower, args.be_disks if args.be_disks is not None else ["HDD=1"], - args.be_cluster, args.reg_be, args.extra_hosts, + args.be_cluster, args.reg_be, args.extra_hosts, env, args.coverage_dir, cloud_store_config, args.sql_mode_node_mgr, args.be_metaservice_endpoint, args.be_cluster_id, args.tde_ak, args.tde_sk, args.tde_aws_ak, args.tde_aws_sk, args.tde_aliyun_ak, args.tde_aliyun_sk,