예제 #1
0
 def test_10_longevity(self):
     os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
     os.environ[
         'SCT_CONFIG_FILES'] = 'internal_test_data/complex_test_case_with_version.yaml'
     os.environ['SCT_AMI_ID_DB_SCYLLA_DESC'] = 'master'
     conf = SCTConfiguration()
     conf.verify_configuration()
     self.assertEqual(conf.get('user_prefix'),
                      'longevity-50gb-4d-not-jenkins-maste')
예제 #2
0
def _get_node_amounts(config: SCTConfiguration) -> tuple[int, int]:
    num_db_node = config.get("n_db_nodes")
    num_db_node = sum([int(i) for i in num_db_node.split()]) if isinstance(
        num_db_node, str) else num_db_node
    num_loaders = config.get("n_loaders")
    num_loaders = sum([int(i) for i in num_loaders.split()]) if isinstance(
        num_loaders, str) else num_loaders

    return num_db_node, num_loaders
    def test_12_scylla_version_ami(self):
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_SCYLLA_VERSION'] = '3.0.3'

        os.environ['SCT_CONFIG_FILES'] = 'internal_test_data/multi_region_dc_test_case.yaml'
        conf = SCTConfiguration()
        conf.verify_configuration()

        self.assertEqual(conf.get('ami_id_db_scylla'), 'ami-0f1aa8afb878fed2b ami-027c1337dcb46da50')
예제 #4
0
    def test_12_scylla_version_ami_case1():  # pylint: disable=invalid-name
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_SCYLLA_VERSION'] = '3.0.3'
        os.environ['SCT_AMI_ID_DB_SCYLLA'] = 'ami-06f919eb ami-eae4f795'

        os.environ[
            'SCT_CONFIG_FILES'] = 'internal_test_data/multi_region_dc_test_case.yaml'
        conf = SCTConfiguration()
        conf.verify_configuration()
def _prepare_k8s_gce_minikube_resource_setup(sct_config: SCTConfiguration):
    cloud_setup = _prepare_gce_resource_setup(sct_config)

    image_id = sct_config.get("scylla_version")
    cloud_setup.db_node.image_id = f"scylladb/scylladb:{image_id}"
    cloud_setup.db_node.instance_type = sct_config.get(
        "gce_instance_type_minikube")

    return cloud_setup
예제 #6
0
def conf_docs(output_format):
    add_file_logger()

    config_logger = logging.getLogger('sdcm.sct_config')
    config_logger.setLevel(logging.ERROR)
    if output_format == 'markdown':
        click.secho(SCTConfiguration().dump_help_config_markdown())
    elif output_format == 'yaml':
        click.secho(SCTConfiguration().dump_help_config_yaml())
예제 #7
0
def _prepare_k8s_gke_resource_setup(
        sct_config: SCTConfiguration) -> BaseCloudSetupDetails:
    cloud_setup = _prepare_gce_resource_setup(sct_config)
    image_id = sct_config.get("scylla_version")
    cloud_setup.db_node.image_id = f"scylladb/scylladb:{image_id}"
    cloud_setup.monitor_node.image_id = sct_config.get("mgmt_docker_image")
    cloud_setup.loader_node.image_id = f"scylladb/scylladb:{image_id}"

    return cloud_setup
    def test_09_unknown_env(self):
        os.environ['SCT_CLUSTER_BACKEND'] = 'docker'
        os.environ['SCT_CONFIG_FILES'] = 'internal_test_data/unknown_param_in_config.yaml'
        os.environ['SCT_WHAT_IS_THAT'] = 'just_made_this_up'
        os.environ['SCT_WHAT_IS_THAT_2'] = 'what is this ?'
        conf = SCTConfiguration()
        with self.assertRaises(ValueError) as cm:
            conf.verify_configuration()

        self.assertEquals(cm.exception.message, 'Unsupported environment variables were used:\n\t - SCT_WHAT_IS_THAT=just_made_this_up\n\t - SCT_WHAT_IS_THAT_2=what is this ?')
예제 #9
0
    def test_13_scylla_version_ami_branch(self):  # pylint: disable=invalid-name
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_SCYLLA_VERSION'] = 'branch-3.1:9'
        os.environ[
            'SCT_CONFIG_FILES'] = 'internal_test_data/multi_region_dc_test_case.yaml'
        conf = SCTConfiguration()
        conf.verify_configuration()

        self.assertEqual(conf.get('ami_id_db_scylla'),
                         'ami-00b5ac462978479c9 ami-0d911e53781d8a542')
예제 #10
0
    def test_13_scylla_version_ami_branch(self):
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_SCYLLA_VERSION'] = 'branch-3.1:60'
        os.environ[
            'SCT_CONFIG_FILES'] = 'internal_test_data/multi_region_dc_test_case.yaml'
        conf = SCTConfiguration()
        conf.verify_configuration()

        self.assertEqual(conf.get('ami_id_db_scylla'),
                         'ami-0fd79a6f4ca83b0d6 ami-03d6caf668ad59911')
예제 #11
0
def output_conf(config_files, backend):
    add_file_logger()

    if backend:
        os.environ['SCT_CLUSTER_BACKEND'] = backend
    if config_files:
        os.environ['SCT_CONFIG_FILES'] = config_files
    config = SCTConfiguration()
    click.secho(config.dump_config(), fg='green')
    sys.exit(0)
예제 #12
0
    def test_13_scylla_version_ami_branch(self):  # pylint: disable=invalid-name
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_SCYLLA_VERSION'] = 'branch-4.2:100'
        os.environ[
            'SCT_CONFIG_FILES'] = 'internal_test_data/multi_region_dc_test_case.yaml'
        conf = SCTConfiguration()
        conf.verify_configuration()

        self.assertEqual(conf.get('ami_id_db_scylla'),
                         'ami-07d3138defbd9a2cf ami-0f703fdc8e06723f0')
    def test_14_(self):
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_REGION_NAME'] = 'us-east-1'
        os.environ['SCT_N_DB_NODES'] = '2'
        os.environ['SCT_INSTANCE_TYPE_DB'] = 'i3.large'
        os.environ['SCT_AMI_ID_DB_SCYLLA'] = 'ami-b4f8b4cb'

        conf = SCTConfiguration()
        conf.verify_configuration()
        self.assertEqual(conf.get('security_group_ids'), 'sg-c5e1f7a0')
    def test_09_unknown_env(self):
        os.environ['SCT_CLUSTER_BACKEND'] = 'docker'
        os.environ['SCT_CONFIG_FILES'] = 'internal_test_data/unknown_param_in_config.yaml'
        os.environ['SCT_WHAT_IS_THAT'] = 'just_made_this_up'
        os.environ['SCT_WHAT_IS_THAT_2'] = 'what is this ?'
        conf = SCTConfiguration()
        with self.assertRaises(ValueError) as context:
            conf.verify_configuration()

        self.assertIn('SCT_WHAT_IS_THAT_2=what is this ?', str(context.exception))
        self.assertIn('SCT_WHAT_IS_THAT=just_made_this_up', str(context.exception))
예제 #15
0
def conf_docs(output_format):
    add_file_logger()

    os.environ['SCT_CLUSTER_BACKEND'] = "aws"  # just to pass SCTConfiguration() verification.

    config_logger = logging.getLogger('sdcm.sct_config')
    config_logger.setLevel(logging.ERROR)
    if output_format == 'markdown':
        click.secho(SCTConfiguration().dump_help_config_markdown())
    elif output_format == 'yaml':
        click.secho(SCTConfiguration().dump_help_config_yaml())
예제 #16
0
    def test_15_new_scylla_repo(self):
        centos_repo = 'https://s3.amazonaws.com/downloads.scylladb.com/enterprise/rpm/unstable/centos/9f724fedb93b4734fcfaec1156806921ff46e956-2bdfa9f7ef592edaf15e028faf3b7f695f39ebc1-525a0255f73d454f8f97f32b8bdd71c8dec35d3d-a6b2b2355c666b1893f702a587287da978aeec22/71/scylla.repo'

        os.environ['SCT_CLUSTER_BACKEND'] = 'gce'
        os.environ['SCT_SCYLLA_REPO'] = centos_repo
        os.environ['SCT_NEW_SCYLLA_REPO'] = centos_repo
        os.environ['SCT_USER_PREFIX'] = 'testing'

        conf = SCTConfiguration()
        conf.verify_configuration()
        self.assertEqual(conf.get('target_upgrade_version'), '2019.1.1')
    def test_16_oracle_scylla_version_eu_west_1(self):
        ami_3_0_11 = "ami-0535c88b85b914499"

        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_ORACLE_SCYLLA_VERSION'] = "3.0.11"
        os.environ['SCT_REGION_NAME'] = 'eu-west-1'
        os.environ['SCT_CONFIG_FILES'] = 'internal_test_data/minimal_test_case.yaml'

        conf = SCTConfiguration()
        conf.verify_configuration()

        self.assertEqual(conf.get('ami_id_db_oracle'), ami_3_0_11)
예제 #18
0
def test_can_create_basic_scylla_instance_definition_from_sct_config():
    """Test for azure_region_definition_builder"""
    EnvConfig = namedtuple('EnvConfig', [
        "SCT_CLUSTER_BACKEND", "SCT_TEST_ID", "SCT_CONFIG_FILES",
        "SCT_AZURE_REGION_NAME", "SCT_N_DB_NODES", "SCT_USER_PREFIX",
        "SCT_AZURE_IMAGE_DB", "SCT_N_LOADERS", "SCT_N_MONITORS_NODES"
    ])
    env_config = EnvConfig(
        SCT_CLUSTER_BACKEND="azure",
        SCT_TEST_ID="example_test_id",
        SCT_CONFIG_FILES=
        f'["{Path(__file__).parent.absolute()}/azure_default_config.yaml"]',
        SCT_AZURE_REGION_NAME="['eastus', 'easteu']",
        SCT_N_DB_NODES="3 1",
        SCT_USER_PREFIX="unit-test",
        SCT_AZURE_IMAGE_DB="some_image_id",
        SCT_N_LOADERS="2 0",
        SCT_N_MONITORS_NODES="1")

    os.environ.update(env_config._asdict())
    config = SCTConfiguration()
    tags = TestConfig.common_tags()
    ssh_key = KeyStore().get_gce_ssh_key_pair()
    prefix = config.get('user_prefix')
    test_config = TestConfig()
    builder = region_definition_builder.get_builder(params=config,
                                                    test_config=test_config)
    region_definitions = builder.build_all_region_definitions()

    instance_definition = InstanceDefinition(
        name=f"{prefix}-db-node-eastus-1",
        image_id=env_config.SCT_AZURE_IMAGE_DB,
        type="Standard_L8s_v2",
        user_name="scyllaadm",
        root_disk_size=30,
        tags=tags | {
            "NodeType": "scylla-db",
            "keep_action": "",
            'NodeIndex': '1'
        },
        ssh_key=ssh_key)
    assert len(region_definitions) == 2
    actual_region_definition = region_definitions[0]

    assert actual_region_definition.test_id == env_config.SCT_TEST_ID
    assert actual_region_definition.backend == "azure"
    assert actual_region_definition.region == "eastus"
    # ignoring user_data in this validation
    actual_region_definition.definitions[
        0].user_data = instance_definition.user_data
    # ssh_key is not shown, if actual looks the same as expected possibly ssh_key differ
    assert instance_definition == actual_region_definition.definitions[0]
    def test_16_oracle_scylla_version_us_east_1(self):
        ami_3_0_11 = "ami-0a49c99b529429c18"

        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_ORACLE_SCYLLA_VERSION'] = "3.0.11"
        os.environ['SCT_REGION_NAME'] = 'us-east-1'
        os.environ['SCT_AMI_ID_DB_SCYLLA'] = 'ami-eae4f795'
        os.environ['SCT_CONFIG_FILES'] = 'internal_test_data/minimal_test_case.yaml'

        conf = SCTConfiguration()
        conf.verify_configuration()

        self.assertEqual(conf.get('ami_id_db_oracle'), ami_3_0_11)
예제 #20
0
def conf(config_file, backend):
    if backend:
        os.environ['SCT_CLUSTER_BACKEND'] = backend
    os.environ['SCT_CONFIG_FILES'] = config_file
    config = SCTConfiguration()
    try:
        config.verify_configuration()
    except Exception as ex:  # pylint: disable=broad-except
        click.secho(str(ex), fg='red')
        sys.exit(1)
    else:
        click.secho(config.dump_config(), fg='green')
        sys.exit(0)
예제 #21
0
def collect_logs(test_id=None, logdir=None, backend=None, config_file=None):
    add_file_logger()

    from sdcm.logcollector import Collector
    logging.getLogger("paramiko").setLevel(logging.CRITICAL)
    if backend is None:
        if os.environ.get('SCT_CLUSTER_BACKEND', None) is None:
            os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
    else:
        os.environ['SCT_CLUSTER_BACKEND'] = backend

    if config_file and not os.environ.get('SCT_CONFIG_FILES', None):
        os.environ['SCT_CONFIG_FILES'] = config_file

    config = SCTConfiguration()

    collector = Collector(test_id=test_id, params=config, test_dir=logdir)

    collected_logs = collector.run()

    table = PrettyTable(['Cluster set', 'Link'])
    table.align = 'l'
    for cluster_type, s3_link in collected_logs.items():
        table.add_row([cluster_type, s3_link])
    click.echo(table.get_string(title="Collected logs by test-id: {}".format(collector.test_id)))
    def test_13_bool(self):
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_STORE_RESULTS_IN_ELASTICSEARCH'] = 'False'
        os.environ['SCT_CONFIG_FILES'] = 'internal_test_data/multi_region_dc_test_case.yaml'
        conf = SCTConfiguration()

        self.assertEqual(conf['store_results_in_elasticsearch'], False)
    def get_builder(self, params: SCTConfiguration,
                    test_config: TestConfig) -> DefinitionBuilder:
        """Creates RegionDefinition for each region based on SCTConfiguration.

        Prior use, must register builder for given backend."""
        backend = params.get("cluster_backend")
        return self._builder_classes[backend](params, test_config)
예제 #24
0
    def test_13_bool(self):
        os.environ['SCT_CLUSTER_BACKEND'] = 'aws'
        os.environ['SCT_STORE_PERF_RESULTS'] = 'False'
        os.environ[
            'SCT_CONFIG_FILES'] = 'internal_test_data/multi_region_dc_test_case.yaml'
        conf = SCTConfiguration()

        self.assertEqual(conf['store_perf_results'], False)
def _prepare_docker_resource_setup(sct_config: SCTConfiguration):
    db_node_setup = CloudNodesInfo(image_id=sct_config.get('docker_image'),
                                   instance_type="docker",
                                   node_amount=sct_config.get("n_db_nodes"),
                                   post_behaviour=sct_config.get("post_behavior_db_nodes"))
    loader_node_setup = CloudNodesInfo(image_id=sct_config.get('docker_image'),
                                       instance_type="docker",
                                       node_amount=sct_config.get("n_loaders"),
                                       post_behaviour=sct_config.get("post_behavior_loader_nodes"))
    monitor_node_setup = CloudNodesInfo(image_id=sct_config.get('docker_image'),
                                        instance_type="docker",
                                        node_amount=sct_config.get("n_monitor_nodes"),
                                        post_behaviour=sct_config.get("post_behavior_monitor_nodes"))
    cloud_setup = BaseCloudSetupDetails(db_node=db_node_setup, loader_node=loader_node_setup,
                                        monitor_node=monitor_node_setup, backend=sct_config.get("cluster_backend"))

    return cloud_setup
예제 #26
0
def sct_option(name, sct_name, **kwargs):
    sct_opt = SCTConfiguration.get_config_option(sct_name)
    multimple_use = kwargs.pop('multiple', False)
    sct_opt.update(kwargs)
    return click.option(name,
                        type=sct_opt['type'],
                        help=sct_opt['help'],
                        multiple=multimple_use)
    def from_sct_config(cls, test_id: UUID, test_module_path: str,
                        sct_config: SCTConfiguration) -> TestRunWithHeartbeat:
        # pylint: disable=too-many-locals
        if cls.TESTRUN_INSTANCE:
            raise ArgusTestRunError("Instance already initialized")

        release_name = os.getenv("GIT_BRANCH", get_git_current_branch()).split("/")[-1]
        if release_name not in cls.AVAILABLE_RELEASES:
            raise ArgusTestRunError("Refusing to track a non-whitelisted branch", release_name, cls.AVAILABLE_RELEASES)
        LOGGER.info("Preparing Test Details...")
        test_group, *_ = test_module_path.split(".")
        config_files = sct_config.get("config_files")
        job_name = get_job_name()
        job_url = get_job_url()
        started_by = get_username()

        details = TestDetails(name=get_test_name(), scm_revision_id=get_git_commit_id(), started_by=started_by,
                              build_job_name=job_name, build_job_url=job_url,
                              yaml_test_duration=sct_config.get("test_duration"), start_time=int(time.time()),
                              config_files=config_files, packages=[])
        LOGGER.info("Preparing Resource Setup...")
        backend = sct_config.get("cluster_backend")
        raw_regions = sct_config.get("region_name") or sct_config.get("gce_datacenter") or "undefined_region"
        regions = raw_regions.split()
        primary_region = regions[0]

        sct_runner_info = CloudInstanceDetails(public_ip=get_sct_runner_ip(), provider=backend,
                                               region=primary_region, private_ip=get_my_ip())

        cloud_setup = cls.BACKEND_MAP.get(backend, _prepare_unknown_resource_setup)(sct_config)

        setup_details = TestResourcesSetup(sct_runner_host=sct_runner_info, region_name=regions,
                                           cloud_setup=cloud_setup)

        logs = TestLogs()
        resources = TestResources()
        results = TestResults(status=TestStatus.CREATED)

        run_info = TestRunInfo(details=details, setup=setup_details, resources=resources, logs=logs, results=results)
        LOGGER.info("Initializing TestRun...")
        cls.TESTRUN_INSTANCE = TestRunWithHeartbeat(test_id=test_id, group=test_group, release_name=release_name,
                                                    assignee="",
                                                    run_info=run_info,
                                                    config=cls.config())

        return cls.TESTRUN_INSTANCE
def _prepare_gce_resource_setup(sct_config: SCTConfiguration):
    num_db_nodes, n_loaders = _get_node_amounts(sct_config)
    db_node_setup = CloudNodesInfo(image_id=sct_config.get("gce_image_db"),
                                   instance_type=sct_config.get("gce_instance_type_db"),
                                   node_amount=num_db_nodes,
                                   post_behaviour=sct_config.get("post_behavior_db_nodes"))
    loader_node_setup = CloudNodesInfo(image_id=sct_config.get("gce_image_loader"),
                                       instance_type=sct_config.get("gce_instance_type_loader"),
                                       node_amount=n_loaders,
                                       post_behaviour=sct_config.get("post_behavior_loader_nodes"))
    monitor_node_setup = CloudNodesInfo(image_id=sct_config.get("gce_image_monitor"),
                                        instance_type=sct_config.get("gce_instance_type_monitor"),
                                        node_amount=sct_config.get("n_monitor_nodes"),
                                        post_behaviour=sct_config.get("post_behavior_monitor_nodes"))
    cloud_setup = GCESetupDetails(db_node=db_node_setup, loader_node=loader_node_setup,
                                  monitor_node=monitor_node_setup)

    return cloud_setup
def _prepare_unknown_resource_setup(sct_config: SCTConfiguration):
    LOGGER.error("Unknown backend encountered: %s", sct_config.get("cluster_backend"))
    db_node_setup = CloudNodesInfo(image_id="UNKNOWN",
                                   instance_type="UNKNOWN",
                                   node_amount=-1,
                                   post_behaviour="UNKNOWN")
    loader_node_setup = CloudNodesInfo(image_id="UNKNOWN",
                                       instance_type="UNKNOWN",
                                       node_amount=-1,
                                       post_behaviour="UNKNOWN")
    monitor_node_setup = CloudNodesInfo(image_id="UNKNOWN",
                                        instance_type="UNKNOWN",
                                        node_amount=-1,
                                        post_behaviour="UNKNOWN")
    cloud_setup = BaseCloudSetupDetails(db_node=db_node_setup, loader_node=loader_node_setup,
                                        monitor_node=monitor_node_setup, backend=sct_config.get("cluster_backend"))

    return cloud_setup
예제 #30
0
 def __new__(cls, params: SCTConfiguration):
     backend = params.get('cluster_backend')
     try:
         importlib.import_module(cls.__module__.replace(
             '.common.', f'.{backend}.'),
                                 package=None)
     except ModuleNotFoundError:
         pass
     target_class = cls._cluster_backend_mapping.get(
         backend, SCTProvisionLayout)
     return object.__new__(target_class)