示例#1
0
 def test_viable_ignore_bootstrap_validations_input(self):
     inputs = []
     inputs = common.add_ignore_bootstrap_validations_input(inputs)
     ignore_input = json.loads(inputs[0])
     self.assertTrue(ignore_input['ignore_bootstrap_validations'])
示例#2
0
def bootstrap(
    keep_up,
    validate_only,
    skip_validations,
    blueprint_path,
    inputs,
    install_plugins,
    task_retries,
    task_retry_interval,
    task_thread_pool_size,
):
    logger = get_logger()
    env_name = "manager"

    # Verify directory is initialized
    utils.get_context_path()

    # verifying no environment exists from a previous bootstrap
    try:
        bs.load_env(env_name)
    except IOError:
        # Environment is clean
        pass
    else:
        raise RuntimeError(
            "Can't bootstrap because the environment is not clean. Clean the "
            'environment by calling teardown or reset it using the "cfy init '
            '-r" command'
        )

    if not skip_validations:
        logger.info("Executing bootstrap validation...")
        bs.bootstrap_validation(
            blueprint_path,
            name=env_name,
            inputs=inputs,
            task_retries=task_retries,
            task_retry_interval=task_retry_interval,
            task_thread_pool_size=task_thread_pool_size,
            install_plugins=install_plugins,
            resolver=utils.get_import_resolver(),
        )
        logger.info("Bootstrap validation completed successfully")
    elif inputs:
        # The user expects that `--skip-validations` will also ignore
        # bootstrap validations and not only creation_validations
        inputs = common.add_ignore_bootstrap_validations_input(inputs)

    if not validate_only:
        try:
            logger.info("Executing manager bootstrap...")
            details = bs.bootstrap(
                blueprint_path,
                name=env_name,
                inputs=inputs,
                task_retries=task_retries,
                task_retry_interval=task_retry_interval,
                task_thread_pool_size=task_thread_pool_size,
                install_plugins=install_plugins,
            )

            manager_ip = details["manager_ip"]

            provider_context = details["provider_context"]
            with utils.update_wd_settings() as ws_settings:
                ws_settings.set_management_server(manager_ip)
                ws_settings.set_management_key(details["manager_key_path"])
                ws_settings.set_management_user(details["manager_user"])
                ws_settings.set_management_port(details["manager_port"])
                ws_settings.set_provider_context(provider_context)
                ws_settings.set_rest_port(details["rest_port"])
                ws_settings.set_rest_protocol(details["rest_protocol"])

            logger.info("Bootstrap complete")
            logger.info("Manager is up at {0}".format(manager_ip))
        except Exception as ex:
            tpe, value, traceback = sys.exc_info()
            logger.error("Bootstrap failed! ({0})".format(str(ex)))
            if not keep_up:
                try:
                    bs.load_env(env_name)
                except IOError:
                    # the bootstrap exception occurred before environment was
                    # even initialized - nothing to teardown.
                    pass
                else:
                    logger.info("Executing teardown due to failed bootstrap...")
                    bs.teardown(name=env_name, task_retries=5, task_retry_interval=30, task_thread_pool_size=1)
            raise tpe, value, traceback