Beispiel #1
0
    def __init__(
        self,
        default_config_file: str = None,
        override_config_file: str = None,
        validate_schema: bool = True,
        legacy_compatibility: bool = True,
    ):
        # Default configuraiton
        if default_config_file is None:
            default_config_file = os.path.join(os.path.dirname(__file__),
                                               "default_bentoml.yml")

        with open(default_config_file, "rb") as f:
            self.config = YAML().load(f.read())

        if validate_schema:
            try:
                SCHEMA.validate(self.config)
            except SchemaError as e:
                raise BentoMLConfigException(
                    "Default configuration 'default_bentoml.yml' does not"
                    " conform to the required schema.") from e

        # Legacy configuration compatibility
        if legacy_compatibility:
            try:
                self.config["bento_server"]["port"] = config(
                    "apiserver").getint("default_port")
                self.config["bento_server"]["workers"] = config(
                    "apiserver").getint("default_gunicorn_workers_count")
                self.config["bento_server"]["max_request_size"] = config(
                    "apiserver").getint("default_max_request_size")

                if "default_max_batch_size" in config("marshal_server"):
                    self.config["bento_server"]["microbatch"][
                        "max_batch_size"] = config("marshal_server").getint(
                            "default_max_batch_size")

                if "default_max_latency" in config("marshal_server"):
                    self.config["bento_server"]["microbatch"][
                        "max_latency"] = config("marshal_server").getint(
                            "default_max_latency")

                self.config["bento_server"]["metrics"]["namespace"] = config(
                    "instrument").get("default_namespace")

                self.config["adapters"]["image_input"][
                    "default_extensions"] = [
                        extension.strip()
                        for extension in config("apiserver").get(
                            "default_image_input_accept_file_extensions").
                        split(",")
                    ]
            except KeyError as e:
                raise BentoMLConfigException(
                    "Overriding a non-existent configuration key in compatibility mode."
                ) from e

            if validate_schema:
                try:
                    SCHEMA.validate(self.config)
                except SchemaError as e:
                    raise BentoMLConfigException(
                        "Configuration after applying legacy compatibility"
                        " does not conform to the required schema.") from e

        # User override configuration
        if override_config_file is not None:
            LOGGER.info("Applying user config override from %s" %
                        override_config_file)
            if not os.path.exists(override_config_file):
                raise BentoMLConfigException(
                    f"Config file {override_config_file} not found")

            with open(override_config_file, "rb") as f:
                override_config = YAML().load(f.read())
            always_merger.merge(self.config, override_config)

            if validate_schema:
                try:
                    SCHEMA.validate(self.config)
                except SchemaError as e:
                    raise BentoMLConfigException(
                        "Configuration after user override does not conform to"
                        " the required schema.") from e
Beispiel #2
0
    def __init__(
        self,
        default_config_file: str = None,
        override_config_file: str = None,
        validate_schema: bool = True,
        legacy_compatibility: bool = True,
    ):
        # Default configuraiton
        if default_config_file is None:
            default_config_file = os.path.join(os.path.dirname(__file__),
                                               "default_bentoml.yml")

        with open(default_config_file, "rb") as f:
            self.config = YAML().load(f.read())

        if validate_schema:
            try:
                SCHEMA.validate(self.config)
            except SchemaError as e:
                raise BentoMLConfigException(
                    "Default configuration 'default_bentoml.yml' does not"
                    " conform to the required schema.") from e

        # Legacy configuration compatibility
        if legacy_compatibility:
            try:
                self.config["api_server"]["port"] = config("apiserver").getint(
                    "default_port")
                self.config["api_server"]["max_request_size"] = config(
                    "apiserver").getint("default_max_request_size")
                self.config["marshal_server"]["max_batch_size"] = config(
                    "marshal_server").getint("default_max_batch_size")
                self.config["marshal_server"]["max_latency"] = config(
                    "marshal_server").getint("default_max_latency")
                self.config["marshal_server"]["request_header_flag"] = config(
                    "marshal_server").get("marshal_request_header_flag")
                self.config["yatai"]["url"] = config("yatai_service").get(
                    "url")
                self.config["tracing"]["zipkin_api_url"] = config(
                    "tracing").get("zipkin_api_url")
                self.config["instrument"]["namespace"] = config(
                    "instrument").get("default_namespace")
            except KeyError as e:
                raise BentoMLConfigException(
                    "Overriding a non-existent configuration key in compatibility mode."
                ) from e

            if validate_schema:
                try:
                    SCHEMA.validate(self.config)
                except SchemaError as e:
                    raise BentoMLConfigException(
                        "Configuration after applying legacy compatibility"
                        " does not conform to the required schema.") from e

        # User override configuration
        if override_config_file is not None and os.path.exists(
                override_config_file):
            LOGGER.info("Applying user config override from %s" %
                        override_config_file)
            with open(override_config_file, "rb") as f:
                override_config = YAML().load(f.read())
            always_merger.merge(self.config, override_config)

            if validate_schema:
                try:
                    SCHEMA.validate(self.config)
                except SchemaError as e:
                    raise BentoMLConfigException(
                        "Configuration after user override does not conform to"
                        " the required schema.") from e