Advised manifest changesΒΆ

Any pipeline unit type can also generate manifest changes that should be applied to make sure the application works properly. An example of a manifest change could be an environment variable that should be supplied to the application on deployment.

Each resolver state provides advised_manifest_changes attribute that can be adjusted. Usually, this is done in a Wrap pipeline unit type to make sure the resolved application has correct environment setup to build the application and run it.

An example of a wrap pipeline unit that suggests a manifest change - add environment variable OMP_NUM_THREADS if intel-tensorflow is resolved to the deployment config.

from typing import TYPE_CHECKING
from typing import Optional, Dict, Any

from ...state import State
from ...wrap import Wrap

if TYPE_CHECKING:
    from ..pipeline_builder import PipelineBuilderContext

class ExampleWrap(Wrap):

    CONFIGURATION_DEFAULT = {"package_name": "intel-tensorflow"}  # call this wrap for intel-tensorflow

    _ADVISED_MANIFEST_CHANGES = [
        {
            "apiVersion": "apps.openshift.io/v1",
            "kind": "DeploymentConfig",
            "patch": {
                "op": "add",
                "path": "/spec/template/spec/containers/0/env/0",
                "value": {"name": "OMP_NUM_THREADS", "value": "1"},
            },
        }
    ]

    @classmethod
    def should_include(cls, builder_context: "PipelineBuilderContext") -> Optional[Dict[Any, Any]]:
        """Include this pipeline unit only if it hasn't been included."""
        if builder_context.is_included(cls):
           return None

        return {}

    def run(self, state: State) -> None:
        """Advise manifest changes for intel-tensorflow."""
        state.advised_manifest_changes.append(self._ADVISED_MANIFEST_CHANGES)

The advised_manifest_changes attribute holds a list of changes that should be applied. Each change is a list of JSON Patch objects - each item in the JSON Patch object is evaluated until it succeeds. See RFC-6902 for more info.