diff options
author | Vitaly Isaev <vitalyisaev@ydb.tech> | 2024-02-09 19:34:18 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-09 19:34:18 +0300 |
commit | 767e5ebeffde1a54beb4b4587d7ffe21fa58d9b1 (patch) | |
tree | f75a48af12585c793ee2f673b90db1d97516b6a9 | |
parent | 25f7c52ffd2c252f0675c42e16d428f259627b7e (diff) | |
download | ydb-767e5ebeffde1a54beb4b4587d7ffe21fa58d9b1.tar.gz |
Added 'FQ_CONNECTOR_ENDPOINT' env variable to `local_ydb` (#1769)
* Add 'FQ_CONNECTOR_ENDPOINT' env parameter for `local_ydb`
* Handle scheme type in `FQ_CONNECTOR_ENDPOINT` env variable
-rw-r--r-- | ydb/public/tools/lib/cmds/__init__.py | 31 | ||||
-rw-r--r-- | ydb/public/tools/lib/cmds/ut/test.py | 26 | ||||
-rw-r--r-- | ydb/public/tools/lib/cmds/ut/ya.make | 12 | ||||
-rw-r--r-- | ydb/public/tools/lib/cmds/ya.make | 2 | ||||
-rw-r--r-- | ydb/public/tools/local_ydb/__main__.py | 2 | ||||
-rw-r--r-- | ydb/public/tools/local_ydb/ya.make | 1 | ||||
-rw-r--r-- | ydb/tests/library/harness/kikimr_config.py | 18 | ||||
-rw-r--r-- | ydb/tests/library/ut/kikimr_config.py | 19 | ||||
-rw-r--r-- | ydb/tests/library/ut/ya.make | 12 | ||||
-rw-r--r-- | ydb/tests/library/ya.make | 3 |
10 files changed, 125 insertions, 1 deletions
diff --git a/ydb/public/tools/lib/cmds/__init__.py b/ydb/public/tools/lib/cmds/__init__.py index eaf39f7747b..f5704a46bfe 100644 --- a/ydb/public/tools/lib/cmds/__init__.py +++ b/ydb/public/tools/lib/cmds/__init__.py @@ -8,7 +8,9 @@ import random import string import typing # noqa: F401 import sys +from urllib.parse import urlparse +from ydb.library.yql.providers.common.proto.gateways_config_pb2 import TGenericConnectorConfig from ydb.tests.library.common import yatest_common from ydb.tests.library.harness.kikimr_cluster import kikimr_cluster_factory from ydb.tests.library.harness.kikimr_config import KikimrConfigGenerator @@ -255,6 +257,34 @@ def enable_tls(): return os.getenv('YDB_GRPC_ENABLE_TLS') == 'true' +def generic_connector_config(): + endpoint = os.getenv("FQ_CONNECTOR_ENDPOINT") + if not endpoint: + return None + + parsed = urlparse(endpoint) + if not parsed.hostname: + raise ValueError("Invalid host '{}' in FQ_CONNECTOR_ENDPOINT".format(parsed.hostname)) + + if not (1024 <= parsed.port <= 65535): + raise ValueError("Invalid port '{}' in FQ_CONNECTOR_ENDPOINT".format(parsed.port)) + + valid_schemes = ['grpc', 'grpcs'] + if parsed.scheme not in valid_schemes: + raise ValueError("Invalid schema '{}' in FQ_CONNECTOR_ENDPOINT (possible: {})".format(parsed.schema, valid_schemes)) + + cfg = TGenericConnectorConfig() + cfg.Endpoint.host = parsed.hostname + cfg.Endpoint.port = parsed.port + + if parsed.scheme == 'grpc': + cfg.UseSsl = False + elif parsed.scheme == 'grpcs': + cfg.UseSsl = True + + return cfg + + def grpc_tls_data_path(arguments): default_store = arguments.ydb_working_dir if arguments.ydb_working_dir else None return os.getenv('YDB_GRPC_TLS_DATA_PATH', default_store) @@ -338,6 +368,7 @@ def deploy(arguments): default_users=default_users(), extra_feature_flags=enable_feature_flags, extra_grpc_services=arguments.enabled_grpc_services, + generic_connector_config=generic_connector_config(), **optionals ) diff --git a/ydb/public/tools/lib/cmds/ut/test.py b/ydb/public/tools/lib/cmds/ut/test.py new file mode 100644 index 00000000000..e5164d2413d --- /dev/null +++ b/ydb/public/tools/lib/cmds/ut/test.py @@ -0,0 +1,26 @@ +import os + +from ydb.public.tools.lib.cmds import generic_connector_config +from ydb.library.yql.providers.common.proto.gateways_config_pb2 import TGenericConnectorConfig + + +def test_kikimr_config_generator_generic_connector_config(): + os.environ["FQ_CONNECTOR_ENDPOINT"] = "grpc://localhost:50051" + + expected = TGenericConnectorConfig() + expected.Endpoint.host = "localhost" + expected.Endpoint.port = 50051 + expected.UseSsl = False + + actual = generic_connector_config() + assert actual == expected + + os.environ["FQ_CONNECTOR_ENDPOINT"] = "grpcs://localhost:50051" + + expected = TGenericConnectorConfig() + expected.Endpoint.host = "localhost" + expected.Endpoint.port = 50051 + expected.UseSsl = True + + actual = generic_connector_config() + assert actual == expected diff --git a/ydb/public/tools/lib/cmds/ut/ya.make b/ydb/public/tools/lib/cmds/ut/ya.make new file mode 100644 index 00000000000..97b269c2ee0 --- /dev/null +++ b/ydb/public/tools/lib/cmds/ut/ya.make @@ -0,0 +1,12 @@ +PY3TEST() + +PEERDIR( + ydb/public/tools/lib/cmds + ydb/library/yql/providers/common/proto +) + +TEST_SRCS( + test.py +) + +END() diff --git a/ydb/public/tools/lib/cmds/ya.make b/ydb/public/tools/lib/cmds/ya.make index d8ef2f061bd..fb45edd2af0 100644 --- a/ydb/public/tools/lib/cmds/ya.make +++ b/ydb/public/tools/lib/cmds/ya.make @@ -9,3 +9,5 @@ PEERDIR( ) END() + +RECURSE_FOR_TESTS(ut) diff --git a/ydb/public/tools/local_ydb/__main__.py b/ydb/public/tools/local_ydb/__main__.py index 0d7affd19c5..f315b682cf9 100644 --- a/ydb/public/tools/local_ydb/__main__.py +++ b/ydb/public/tools/local_ydb/__main__.py @@ -9,7 +9,7 @@ if __name__ == '__main__': \033[94m To deploy the local YDB cluster: - {prog} deploy --ydb-working-dir /absolute/path/to/working/directory --ydb-binary-path /path/to/kikimr/driver + {prog} deploy --ydb-working-dir /absolute/path/to/working/directory --ydb-binary-path /path/to/kikimr/driver To cleanup the deployed YDB cluster (this includes removal of working directory, all configuration files, disks and so on): diff --git a/ydb/public/tools/local_ydb/ya.make b/ydb/public/tools/local_ydb/ya.make index e5a2a4165e3..9fa570b365d 100644 --- a/ydb/public/tools/local_ydb/ya.make +++ b/ydb/public/tools/local_ydb/ya.make @@ -3,6 +3,7 @@ PY3_PROGRAM(local_ydb) PY_SRCS(__main__.py) PEERDIR( + ydb/library/yql/providers/common/proto ydb/public/tools/lib/cmds ) diff --git a/ydb/tests/library/harness/kikimr_config.py b/ydb/tests/library/harness/kikimr_config.py index 06a32973f1b..b18e8ea9dc0 100644 --- a/ydb/tests/library/harness/kikimr_config.py +++ b/ydb/tests/library/harness/kikimr_config.py @@ -161,6 +161,7 @@ class KikimrConfigGenerator(object): enforce_user_token_requirement=False, default_user_sid=None, pg_compatible_expirement=False, + generic_connector_config=None, # typing.Optional[TGenericConnectorConfig] ): if extra_feature_flags is None: extra_feature_flags = [] @@ -385,6 +386,23 @@ class KikimrConfigGenerator(object): self.yaml_config["feature_flags"]['enable_temp_tables'] = True self.yaml_config["feature_flags"]['enable_table_pg_types'] = True + if generic_connector_config: + if "query_service_config" not in self.yaml_config: + self.yaml_config["query_service_config"] = {} + + self.yaml_config["query_service_config"]["generic"] = { + "connector": { + "endpoint": { + "host": generic_connector_config.Endpoint.host, + "port": generic_connector_config.Endpoint.port, + }, + "use_ssl": generic_connector_config.UseSsl + } + } + + self.yaml_config["feature_flags"]["enable_external_data_sources"] = True + self.yaml_config["feature_flags"]["enable_script_execution_operations"] = True + @property def pdisks_info(self): return self._pdisks_info diff --git a/ydb/tests/library/ut/kikimr_config.py b/ydb/tests/library/ut/kikimr_config.py new file mode 100644 index 00000000000..7f60089fc8b --- /dev/null +++ b/ydb/tests/library/ut/kikimr_config.py @@ -0,0 +1,19 @@ +from ydb.tests.library.harness.kikimr_config import KikimrConfigGenerator + +from ydb.library.yql.providers.common.proto.gateways_config_pb2 import TGenericConnectorConfig + + +def test_kikimr_config_generator_generic_connector_config(): + generic_connector_config = TGenericConnectorConfig() + generic_connector_config.Endpoint.host = "localhost" + generic_connector_config.Endpoint.port = 50051 + generic_connector_config.UseSsl = False + + cfg_gen = KikimrConfigGenerator(generic_connector_config=generic_connector_config) + yaml_config = cfg_gen.yaml_config + + assert yaml_config["query_service_config"]["generic"]["connector"]["endpoint"]["host"] == generic_connector_config.Endpoint.host + assert yaml_config["query_service_config"]["generic"]["connector"]["endpoint"]["port"] == generic_connector_config.Endpoint.port + assert yaml_config["query_service_config"]["generic"]["connector"]["use_ssl"] == generic_connector_config.UseSsl + assert yaml_config["feature_flags"]["enable_external_data_sources"] is True + assert yaml_config["feature_flags"]["enable_script_execution_operations"] is True diff --git a/ydb/tests/library/ut/ya.make b/ydb/tests/library/ut/ya.make new file mode 100644 index 00000000000..9becd0e76ef --- /dev/null +++ b/ydb/tests/library/ut/ya.make @@ -0,0 +1,12 @@ +PY3TEST() + +PEERDIR( + ydb/tests/library + ydb/library/yql/providers/common/proto +) + +TEST_SRCS( + kikimr_config.py +) + +END() diff --git a/ydb/tests/library/ya.make b/ydb/tests/library/ya.make index 81b4cc2aed8..2e043071c2b 100644 --- a/ydb/tests/library/ya.make +++ b/ydb/tests/library/ya.make @@ -95,6 +95,7 @@ PEERDIR( library/python/svn_version library/python/testing/yatest_common ydb/core/protos + ydb/library/yql/providers/common/proto ydb/public/api/grpc ydb/public/api/grpc/draft ydb/public/api/protos @@ -103,3 +104,5 @@ PEERDIR( ) END() + +RECURSE_FOR_TESTS(ut) |