mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 07:31:57 +00:00
Merge pull request #12168 from qoega/compose-inside-docker
Place common docker compose files to integration docker container
This commit is contained in:
commit
042a3aa8d1
@ -1,6 +1,6 @@
|
|||||||
## Docker containers for integration tests
|
## Docker containers for integration tests
|
||||||
- `base` container with required packages
|
- `base` container with required packages
|
||||||
- `runner` container with that runs integration tests in docker
|
- `runner` container with that runs integration tests in docker
|
||||||
- `compose` contains docker_compose YaML files that are used in tests
|
- `runnner/compose` contains docker\_compose YaML files that are used in tests
|
||||||
|
|
||||||
How to run integration tests is described in tests/integration/README.md
|
How to run integration tests is described in tests/integration/README.md
|
@ -63,6 +63,7 @@ RUN set -eux; \
|
|||||||
|
|
||||||
COPY modprobe.sh /usr/local/bin/modprobe
|
COPY modprobe.sh /usr/local/bin/modprobe
|
||||||
COPY dockerd-entrypoint.sh /usr/local/bin/
|
COPY dockerd-entrypoint.sh /usr/local/bin/
|
||||||
|
COPY compose/ /compose/
|
||||||
|
|
||||||
RUN set -x \
|
RUN set -x \
|
||||||
&& addgroup --system dockremap \
|
&& addgroup --system dockremap \
|
||||||
|
@ -25,12 +25,13 @@ To check, that you have access to Docker, run `docker ps`.
|
|||||||
Run the tests with the `pytest` command. To select which tests to run, use: `pytest -k <test_name_pattern>`
|
Run the tests with the `pytest` command. To select which tests to run, use: `pytest -k <test_name_pattern>`
|
||||||
|
|
||||||
By default tests are run with system-wide client binary, server binary and base configs. To change that,
|
By default tests are run with system-wide client binary, server binary and base configs. To change that,
|
||||||
set the following environment variables:
|
set the following environment variables:`
|
||||||
* `CLICKHOUSE_TESTS_SERVER_BIN_PATH` to choose the server binary.
|
* `CLICKHOUSE_TESTS_SERVER_BIN_PATH` to choose the server binary.
|
||||||
* `CLICKHOUSE_TESTS_CLIENT_BIN_PATH` to choose the client binary.
|
* `CLICKHOUSE_TESTS_CLIENT_BIN_PATH` to choose the client binary.
|
||||||
* `CLICKHOUSE_TESTS_BASE_CONFIG_DIR` to choose the directory from which base configs (`config.xml` and
|
* `CLICKHOUSE_TESTS_BASE_CONFIG_DIR` to choose the directory from which base configs (`config.xml` and
|
||||||
`users.xml`) are taken.
|
`users.xml`) are taken.
|
||||||
|
|
||||||
|
For tests that use common docker compose files you may need to set up their path with environment variable: `DOCKER_COMPOSE_DIR=$HOME/ClickHouse/docker/test/integration/runner/compose`
|
||||||
|
|
||||||
### Running with runner script
|
### Running with runner script
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ from .hdfs_api import HDFSApi
|
|||||||
|
|
||||||
HELPERS_DIR = p.dirname(__file__)
|
HELPERS_DIR = p.dirname(__file__)
|
||||||
CLICKHOUSE_ROOT_DIR = p.join(p.dirname(__file__), "../../..")
|
CLICKHOUSE_ROOT_DIR = p.join(p.dirname(__file__), "../../..")
|
||||||
DOCKER_COMPOSE_DIR = p.join(CLICKHOUSE_ROOT_DIR, "docker/test/integration/compose/")
|
LOCAL_DOCKER_COMPOSE_DIR = p.join(CLICKHOUSE_ROOT_DIR, "docker/test/integration/runner/compose/")
|
||||||
DEFAULT_ENV_NAME = 'env_file'
|
DEFAULT_ENV_NAME = 'env_file'
|
||||||
|
|
||||||
SANITIZER_SIGN = "=================="
|
SANITIZER_SIGN = "=================="
|
||||||
@ -52,7 +52,7 @@ def subprocess_check_call(args):
|
|||||||
|
|
||||||
|
|
||||||
def subprocess_call(args):
|
def subprocess_call(args):
|
||||||
# Uncomment for debugging
|
# Uncomment for debugging..;
|
||||||
# print('run:', ' ' . join(args))
|
# print('run:', ' ' . join(args))
|
||||||
subprocess.call(args)
|
subprocess.call(args)
|
||||||
|
|
||||||
@ -67,6 +67,17 @@ def get_odbc_bridge_path():
|
|||||||
return '/usr/bin/clickhouse-odbc-bridge'
|
return '/usr/bin/clickhouse-odbc-bridge'
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
def get_docker_compose_path():
|
||||||
|
compose_path = os.environ.get('DOCKER_COMPOSE_DIR')
|
||||||
|
if compose_path is not None:
|
||||||
|
return os.path.dirname(compose_path)
|
||||||
|
else:
|
||||||
|
if os.path.exists(os.path.dirname('/compose/')):
|
||||||
|
return os.path.dirname('/compose/') #default in docker runner container
|
||||||
|
else:
|
||||||
|
print("Fallback docker_compose_path to LOCAL_DOCKER_COMPOSE_DIR: {}".format(LOCAL_DOCKER_COMPOSE_DIR))
|
||||||
|
return LOCAL_DOCKER_COMPOSE_DIR
|
||||||
|
|
||||||
|
|
||||||
class ClickHouseCluster:
|
class ClickHouseCluster:
|
||||||
"""ClickHouse cluster with several instances and (possibly) ZooKeeper.
|
"""ClickHouse cluster with several instances and (possibly) ZooKeeper.
|
||||||
@ -181,17 +192,19 @@ class ClickHouseCluster:
|
|||||||
ipv6_address=ipv6_address,
|
ipv6_address=ipv6_address,
|
||||||
with_installed_binary=with_installed_binary, tmpfs=tmpfs or [])
|
with_installed_binary=with_installed_binary, tmpfs=tmpfs or [])
|
||||||
|
|
||||||
|
docker_compose_yml_dir = get_docker_compose_path()
|
||||||
|
|
||||||
self.instances[name] = instance
|
self.instances[name] = instance
|
||||||
if ipv4_address is not None or ipv6_address is not None:
|
if ipv4_address is not None or ipv6_address is not None:
|
||||||
self.with_net_trics = True
|
self.with_net_trics = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_net.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_net.yml')])
|
||||||
|
|
||||||
self.base_cmd.extend(['--file', instance.docker_compose_path])
|
self.base_cmd.extend(['--file', instance.docker_compose_path])
|
||||||
|
|
||||||
cmds = []
|
cmds = []
|
||||||
if with_zookeeper and not self.with_zookeeper:
|
if with_zookeeper and not self.with_zookeeper:
|
||||||
if not zookeeper_docker_compose_path:
|
if not zookeeper_docker_compose_path:
|
||||||
zookeeper_docker_compose_path = p.join(DOCKER_COMPOSE_DIR, 'docker_compose_zookeeper.yml')
|
zookeeper_docker_compose_path = p.join(docker_compose_yml_dir, 'docker_compose_zookeeper.yml')
|
||||||
|
|
||||||
self.with_zookeeper = True
|
self.with_zookeeper = True
|
||||||
self.zookeeper_use_tmpfs = zookeeper_use_tmpfs
|
self.zookeeper_use_tmpfs = zookeeper_use_tmpfs
|
||||||
@ -202,86 +215,86 @@ class ClickHouseCluster:
|
|||||||
|
|
||||||
if with_mysql and not self.with_mysql:
|
if with_mysql and not self.with_mysql:
|
||||||
self.with_mysql = True
|
self.with_mysql = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_mysql.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_mysql.yml')])
|
||||||
self.base_mysql_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_mysql_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_mysql.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_mysql.yml')]
|
||||||
|
|
||||||
cmds.append(self.base_mysql_cmd)
|
cmds.append(self.base_mysql_cmd)
|
||||||
|
|
||||||
if with_postgres and not self.with_postgres:
|
if with_postgres and not self.with_postgres:
|
||||||
self.with_postgres = True
|
self.with_postgres = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_postgres.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_postgres.yml')])
|
||||||
self.base_postgres_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_postgres_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_postgres.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_postgres.yml')]
|
||||||
cmds.append(self.base_postgres_cmd)
|
cmds.append(self.base_postgres_cmd)
|
||||||
|
|
||||||
if with_odbc_drivers and not self.with_odbc_drivers:
|
if with_odbc_drivers and not self.with_odbc_drivers:
|
||||||
self.with_odbc_drivers = True
|
self.with_odbc_drivers = True
|
||||||
if not self.with_mysql:
|
if not self.with_mysql:
|
||||||
self.with_mysql = True
|
self.with_mysql = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_mysql.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_mysql.yml')])
|
||||||
self.base_mysql_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_mysql_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_mysql.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_mysql.yml')]
|
||||||
cmds.append(self.base_mysql_cmd)
|
cmds.append(self.base_mysql_cmd)
|
||||||
|
|
||||||
if not self.with_postgres:
|
if not self.with_postgres:
|
||||||
self.with_postgres = True
|
self.with_postgres = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_postgres.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_postgres.yml')])
|
||||||
self.base_postgres_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_postgres_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file',
|
self.project_name, '--file',
|
||||||
p.join(DOCKER_COMPOSE_DIR, 'docker_compose_postgres.yml')]
|
p.join(docker_compose_yml_dir, 'docker_compose_postgres.yml')]
|
||||||
cmds.append(self.base_postgres_cmd)
|
cmds.append(self.base_postgres_cmd)
|
||||||
|
|
||||||
if with_kafka and not self.with_kafka:
|
if with_kafka and not self.with_kafka:
|
||||||
self.with_kafka = True
|
self.with_kafka = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_kafka.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_kafka.yml')])
|
||||||
self.base_kafka_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_kafka_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_kafka.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_kafka.yml')]
|
||||||
cmds.append(self.base_kafka_cmd)
|
cmds.append(self.base_kafka_cmd)
|
||||||
|
|
||||||
if with_rabbitmq and not self.with_rabbitmq:
|
if with_rabbitmq and not self.with_rabbitmq:
|
||||||
self.with_rabbitmq = True
|
self.with_rabbitmq = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_rabbitmq.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_rabbitmq.yml')])
|
||||||
self.base_rabbitmq_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_rabbitmq_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_rabbitmq.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_rabbitmq.yml')]
|
||||||
cmds.append(self.base_rabbitmq_cmd)
|
cmds.append(self.base_rabbitmq_cmd)
|
||||||
|
|
||||||
if with_hdfs and not self.with_hdfs:
|
if with_hdfs and not self.with_hdfs:
|
||||||
self.with_hdfs = True
|
self.with_hdfs = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_hdfs.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_hdfs.yml')])
|
||||||
self.base_hdfs_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_hdfs_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_hdfs.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_hdfs.yml')]
|
||||||
cmds.append(self.base_hdfs_cmd)
|
cmds.append(self.base_hdfs_cmd)
|
||||||
|
|
||||||
if with_mongo and not self.with_mongo:
|
if with_mongo and not self.with_mongo:
|
||||||
self.with_mongo = True
|
self.with_mongo = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_mongo.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_mongo.yml')])
|
||||||
self.base_mongo_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_mongo_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_mongo.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_mongo.yml')]
|
||||||
cmds.append(self.base_mongo_cmd)
|
cmds.append(self.base_mongo_cmd)
|
||||||
|
|
||||||
if self.with_net_trics:
|
if self.with_net_trics:
|
||||||
for cmd in cmds:
|
for cmd in cmds:
|
||||||
cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_net.yml')])
|
cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_net.yml')])
|
||||||
|
|
||||||
if with_redis and not self.with_redis:
|
if with_redis and not self.with_redis:
|
||||||
self.with_redis = True
|
self.with_redis = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_redis.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_redis.yml')])
|
||||||
self.base_redis_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_redis_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_redis.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_redis.yml')]
|
||||||
|
|
||||||
if with_minio and not self.with_minio:
|
if with_minio and not self.with_minio:
|
||||||
self.with_minio = True
|
self.with_minio = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_minio.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_minio.yml')])
|
||||||
self.base_minio_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_minio_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_minio.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_minio.yml')]
|
||||||
cmds.append(self.base_minio_cmd)
|
cmds.append(self.base_minio_cmd)
|
||||||
|
|
||||||
if with_cassandra and not self.with_cassandra:
|
if with_cassandra and not self.with_cassandra:
|
||||||
self.with_cassandra = True
|
self.with_cassandra = True
|
||||||
self.base_cmd.extend(['--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_cassandra.yml')])
|
self.base_cmd.extend(['--file', p.join(docker_compose_yml_dir, 'docker_compose_cassandra.yml')])
|
||||||
self.base_cassandra_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
self.base_cassandra_cmd = ['docker-compose', '--project-directory', self.base_dir, '--project-name',
|
||||||
self.project_name, '--file', p.join(DOCKER_COMPOSE_DIR, 'docker_compose_cassandra.yml')]
|
self.project_name, '--file', p.join(docker_compose_yml_dir, 'docker_compose_cassandra.yml')]
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user