Пример #1
0
 def test_get_resolver(self):
     cli_runner.run_cli('cfy init -r')
     resolver_configuration = create_resolver_configuration(
         implementation='mock implementation', parameters='mock parameters')
     update_config_file(resolver_configuration=resolver_configuration)
     with mock.patch('dsl_parser.utils.create_import_resolver') as \
             mock_create_import_resolver:
         utils.get_import_resolver()
         mock_create_import_resolver.assert_called_once_with(
             resolver_configuration[IMPORT_RESOLVER_KEY])
Пример #2
0
 def test_get_resolver(self):
     cli_runner.run_cli('cfy init -r')
     resolver_configuration = create_resolver_configuration(
         implementation='mock implementation',
         parameters='mock parameters')
     update_config_file(resolver_configuration=resolver_configuration)
     with mock.patch('dsl_parser.utils.create_import_resolver') as \
             mock_create_import_resolver:
         utils.get_import_resolver()
         mock_create_import_resolver.assert_called_once_with(
             resolver_configuration[IMPORT_RESOLVER_KEY])
Пример #3
0
def init(blueprint_path,
         inputs,
         install_plugins):
    if os.path.isdir(_storage_dir()):
        shutil.rmtree(_storage_dir())

    if not utils.is_initialized():
        cfy_init(reset_config=False, skip_logging=True)
    try:
        common.initialize_blueprint(
            blueprint_path=blueprint_path,
            name=_NAME,
            inputs=inputs,
            storage=_storage(),
            install_plugins=install_plugins,
            resolver=utils.get_import_resolver()
        )
    except ImportError as e:

        # import error indicates
        # some plugin modules are missing
        # TODO - consider adding an error code to
        # TODO - all of our exceptions. so that we
        # TODO - easily identify them here
        e.possible_solutions = [
            "Run `cfy local init --install-plugins -p {0}`"
            .format(blueprint_path),
            "Run `cfy local install-plugins -p {0}`"
            .format(blueprint_path)
        ]
        raise

    get_logger().info("Initiated {0}\nIf you make changes to the "
                      "blueprint, run `cfy local init -p {0}` "
                      "again to apply them".format(blueprint_path))
Пример #4
0
def init(blueprint_path, inputs, install_plugins_):
    if os.path.isdir(_storage_dir()):
        shutil.rmtree(_storage_dir())

    if not utils.is_initialized():
        cfy_init(reset_config=False, skip_logging=True)
    try:
        common.initialize_blueprint(blueprint_path=blueprint_path,
                                    name=_NAME,
                                    inputs=inputs,
                                    storage=_storage(),
                                    install_plugins=install_plugins_,
                                    resolver=utils.get_import_resolver())
    except ImportError as e:

        # import error indicates
        # some plugin modules are missing
        # TODO - consider adding an error code to
        # TODO - all of our exceptions. so that we
        # TODO - easily identify them here
        e.possible_solutions = [
            "Run 'cfy local init --install-plugins -p {0}'".format(
                blueprint_path),
            "Run 'cfy local install-plugins -p {0}'".format(blueprint_path)
        ]
        raise

    get_logger().info("Initiated {0}\nIf you make changes to the "
                      "blueprint, "
                      "run 'cfy local init -p {0}' "
                      "again to apply them".format(blueprint_path))
Пример #5
0
 def test_get_custom_resolver(self):
     cli_runner.run_cli('cfy init -r')
     parameters = {'param': 'custom-parameter'}
     custom_resolver_class_path = "%s:%s" % (
         CustomImportResolver.__module__, CustomImportResolver.__name__)
     import_resolver_config = create_resolver_configuration(
         implementation=custom_resolver_class_path, parameters=parameters)
     update_config_file(resolver_configuration=import_resolver_config)
     resolver = utils.get_import_resolver()
     self.assertEqual(type(resolver), CustomImportResolver)
     self.assertEqual(resolver.param, 'custom-parameter')
Пример #6
0
 def test_get_custom_resolver(self):
     cli_runner.run_cli('cfy init -r')
     parameters = {'param': 'custom-parameter'}
     custom_resolver_class_path = "%s:%s" % (
         CustomImportResolver.__module__, CustomImportResolver.__name__)
     import_resolver_config = create_resolver_configuration(
         implementation=custom_resolver_class_path, parameters=parameters)
     update_config_file(resolver_configuration=import_resolver_config)
     resolver = utils.get_import_resolver()
     self.assertEqual(type(resolver), CustomImportResolver)
     self.assertEqual(resolver.param, 'custom-parameter')
Пример #7
0
def validate(blueprint_path):
    logger = get_logger()

    logger.info(messages.VALIDATING_BLUEPRINT.format(blueprint_path.name))
    try:
        resolver = utils.get_import_resolver()
        parse_from_path(dsl_file_path=blueprint_path.name, resolver=resolver)
    except DSLParsingException as ex:
        msg = (messages.VALIDATING_BLUEPRINT_FAILED.format(
            blueprint_path.name, str(ex)))
        raise CloudifyCliError(msg)
    logger.info(messages.VALIDATING_BLUEPRINT_SUCCEEDED)
Пример #8
0
def validate(blueprint_path):
    logger = get_logger()

    logger.info(
        messages.VALIDATING_BLUEPRINT.format(blueprint_path.name))
    try:
        resolver = utils.get_import_resolver()
        parse_from_path(dsl_file_path=blueprint_path.name, resolver=resolver)
    except DSLParsingException as ex:
        msg = (messages.VALIDATING_BLUEPRINT_FAILED
               .format(blueprint_path.name, str(ex)))
        raise CloudifyCliError(msg)
    logger.info(messages.VALIDATING_BLUEPRINT_SUCCEEDED)
Пример #9
0
def validate(blueprint_path):
    logger = get_logger()

    logger.info(
        'Validating blueprint: {0}'.format(blueprint_path.name))
    try:
        resolver = utils.get_import_resolver()
        validate_version = utils.is_validate_definitions_version()
        parse_from_path(dsl_file_path=blueprint_path.name,
                        resolver=resolver,
                        validate_version=validate_version)
    except DSLParsingException as ex:
        raise CloudifyCliError('Failed to validate blueprint {0}'.format(
            str(ex)))
    logger.info('Blueprint validated successfully')
Пример #10
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')

    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_provider_context(provider_context)
                ws_settings.set_rest_port(details['rest_port'])
                ws_settings.set_protocol(details['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
 def _validate_blueprint(self, blueprint_file):
     resolver = get_import_resolver()
     validate_version = is_validate_definitions_version()
     parse_from_path(dsl_file_path=blueprint_file,
                     resolver=resolver,
                     validate_version=validate_version)
Пример #12
0
def bootstrap(blueprint_path,
              name='manager',
              inputs=None,
              task_retries=5,
              task_retry_interval=30,
              task_thread_pool_size=1,
              install_plugins=False):

    def get_protocol(rest_port):
        return constants.SECURED_PROTOCOL \
            if str(rest_port) == str(constants.SECURED_REST_PORT) \
            else constants.DEFAULT_PROTOCOL

    storage = local.FileStorage(storage_dir=_workdir())
    try:
        env = common.initialize_blueprint(
            blueprint_path,
            name=name,
            inputs=inputs,
            storage=storage,
            install_plugins=install_plugins,
            resolver=utils.get_import_resolver()
        )
    except ImportError as e:
        e.possible_solutions = [
            "Run 'cfy local install-plugins -p {0}'"
            .format(blueprint_path),
            "Run 'cfy bootstrap --install-plugins -p {0}'"
            .format(blueprint_path)
        ]
        raise

    env.execute(workflow='install',
                task_retries=task_retries,
                task_retry_interval=task_retry_interval,
                task_thread_pool_size=task_thread_pool_size)

    nodes = env.storage.get_nodes()
    node_instances = env.storage.get_node_instances()
    nodes_by_id = {node.id: node for node in nodes}

    try:
        manager_node_instance = \
            next(node_instance for node_instance in node_instances if
                 'cloudify.nodes.CloudifyManager' in
                 nodes_by_id[node_instance.node_id].type_hierarchy)
    except Exception:
        manager_node_instance = \
            next(node_instance for node_instance in node_instances if
                 'cloudify.nodes.MyCloudifyManager' in
                 nodes_by_id[node_instance.node_id].type_hierarchy)
        manager_node = nodes_by_id['manager_configuration']

    if manager_node_instance.runtime_properties.get('provider'):
        provider_context = \
            manager_node_instance.runtime_properties[
                PROVIDER_RUNTIME_PROPERTY]
        manager_ip = \
            manager_node_instance.runtime_properties[
                MANAGER_IP_RUNTIME_PROPERTY]
        manager_user = \
            manager_node_instance.runtime_properties[
                MANAGER_USER_RUNTIME_PROPERTY]
        manager_key_path = manager_node_instance.runtime_properties[
            MANAGER_KEY_PATH_RUNTIME_PROPERTY]
        rest_port = \
            manager_node_instance.runtime_properties[REST_PORT]
    else:
        manager_ip = env.outputs()['manager_ip']
        manager_user = manager_node.properties['ssh_user']
        manager_key_path = manager_node.properties['ssh_key_filename']
        rest_port = manager_node_instance.runtime_properties[REST_PORT]

        fabric_env = {
            "host_string": manager_ip,
            "user": manager_user,
            "key_filename": manager_key_path
        }

        agent_remote_key_path = _handle_agent_key_file(fabric_env,
                                                       manager_node)

        provider_context = _handle_provider_context(
            agent_remote_key_path=agent_remote_key_path,
            fabric_env=fabric_env,
            manager_node=manager_node,
            manager_node_instance=manager_node_instance)

        _upload_resources(manager_node, fabric_env, manager_ip, rest_port,
                          get_protocol(rest_port))

    protocol = get_protocol(rest_port)

    return {
        'provider_name': 'provider',
        'provider_context': provider_context,
        'manager_ip': manager_ip,
        'manager_user': manager_user,
        'manager_key_path': manager_key_path,
        'rest_port': rest_port,
        'protocol': protocol
    }
Пример #13
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
Пример #14
0
def bootstrap(blueprint_path,
              name='manager',
              inputs=None,
              task_retries=5,
              task_retry_interval=30,
              task_thread_pool_size=1,
              install_plugins=False):

    storage = local.FileStorage(storage_dir=_workdir())
    try:
        env = common.initialize_blueprint(
            blueprint_path,
            name=name,
            inputs=inputs,
            storage=storage,
            install_plugins=install_plugins,
            resolver=utils.get_import_resolver()
        )
    except ImportError as e:
        e.possible_solutions = [
            "Run 'cfy local install-plugins -p {0}'"
            .format(blueprint_path),
            "Run 'cfy bootstrap --install-plugins -p {0}'"
            .format(blueprint_path)
        ]
        raise

    env.execute(workflow='install',
                task_retries=task_retries,
                task_retry_interval=task_retry_interval,
                task_thread_pool_size=task_thread_pool_size)

    nodes = env.storage.get_nodes()
    node_instances = env.storage.get_node_instances()
    nodes_by_id = {node.id: node for node in nodes}

    try:
        manager_node_instance = \
            next(node_instance for node_instance in node_instances if
                 'cloudify.nodes.CloudifyManager' in
                 nodes_by_id[node_instance.node_id].type_hierarchy)
    except Exception:
        manager_node_instance = \
            next(node_instance for node_instance in node_instances if
                 'cloudify.nodes.MyCloudifyManager' in
                 nodes_by_id[node_instance.node_id].type_hierarchy)
        manager_node = nodes_by_id['manager_configuration']

    rest_port = manager_node_instance.runtime_properties[
        constants.REST_PORT_RUNTIME_PROPERTY]
    rest_protocol = manager_node_instance.runtime_properties[
        constants.REST_PROTOCOL_RUNTIME_PROPERTY]

    if manager_node_instance.runtime_properties.get('provider'):
        provider_context = \
            manager_node_instance.runtime_properties[
                PROVIDER_RUNTIME_PROPERTY]
        manager_ip = \
            manager_node_instance.runtime_properties[
                MANAGER_IP_RUNTIME_PROPERTY]
        manager_user = \
            manager_node_instance.runtime_properties[
                MANAGER_USER_RUNTIME_PROPERTY]
        manager_port = \
            manager_node_instance.runtime_properties[
                MANAGER_PORT_RUNTIME_PROPERTY]
        manager_key_path = manager_node_instance.runtime_properties[
            MANAGER_KEY_PATH_RUNTIME_PROPERTY]
    else:
        manager_ip = env.outputs()['manager_ip']
        manager_user = manager_node.properties['ssh_user']
        manager_port = manager_node.properties['ssh_port']
        manager_key_path = manager_node.properties['ssh_key_filename']

        fabric_env = build_fabric_env(
            manager_ip, manager_user, manager_key_path, manager_port)

        agent_remote_key_path = _handle_agent_key_file(fabric_env,
                                                       manager_node)

        # dump public rest certificate to a local file for future
        # communication with the rest server
        rest_public_cert = env.outputs()['rest_server_public_certificate']
        if rest_public_cert:
            cert_path = utils.get_default_rest_cert_local_path()
            with open(cert_path, 'w') as cert_file:
                cert_file.write(rest_public_cert)

        rest_client = utils.get_rest_client(rest_host=manager_ip,
                                            rest_port=rest_port,
                                            rest_protocol=rest_protocol,
                                            username=utils.get_username(),
                                            password=utils.get_password(),
                                            skip_version_check=True)

        provider_context = _handle_provider_context(
            rest_client=rest_client,
            remote_agents_private_key_path=agent_remote_key_path,
            manager_node=manager_node,
            manager_node_instance=manager_node_instance)

        _upload_resources(manager_node, fabric_env, rest_client, task_retries,
                          task_retry_interval)

        _perform_sanity(env=env,
                        manager_ip=manager_ip,
                        fabric_env=fabric_env,
                        task_retries=task_retries,
                        task_retry_interval=task_retry_interval,
                        task_thread_pool_size=task_thread_pool_size)

    return {
        'provider_name': 'provider',
        'provider_context': provider_context,
        'manager_ip': manager_ip,
        'manager_user': manager_user,
        'manager_port': manager_port,
        'manager_key_path': manager_key_path,
        'rest_port': rest_port,
        'rest_protocol': rest_protocol
    }
Пример #15
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')

    if not validate_only:
        try:
            logger.info('executing 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_provider_context(provider_context)
                ws_settings.set_rest_port(details['rest_port'])
                ws_settings.set_protocol(details['protocol'])

            logger.info('bootstrapping complete')
            logger.info('management server 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