Skip to content

renderfarm

ayon_workflow.renderfarm

get_supported_renderfarms()

Return a dict of supported/active renderfarm managers.

Source code in client/ayon_workflow/workflow_execution/renderfarm/__init__.py
52
53
54
55
56
57
58
59
60
61
62
63
def get_supported_renderfarms() -> Dict[str, bool]:
    """ Return a dict of supported/active renderfarm managers.
    """
    active_renderfarms = {}
    for rfarm_manager in _SUPPORTED_RENDERFARMS:
        try:
            _get_submit_function(rfarm_manager)
            active_renderfarms[rfarm_manager] = True
        except Exception:
            active_renderfarms[rfarm_manager] = False

    return active_renderfarms

submit_workflow_to_farm(workflow, backend_dir, inputs_data=None, dispatch_graph_name=None, project=None, log=None)

Submit workflow to supported farm.

Source code in client/ayon_workflow/workflow_execution/renderfarm/__init__.py
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
def submit_workflow_to_farm(
        workflow: Union[Workflow, str],
        backend_dir: str,
        inputs_data: Union[str, Dict, None] = None,
        dispatch_graph_name: Optional[str] = None,
        project: Optional[str] = None,
        log: Optional[logging.Logger] = None,
    ):
    """ Submit workflow to supported farm.
    """
    register_all_plugins()

    # Convert workflow path to Workflow instance if needed.
    if isinstance(workflow, str):
        if project:
            workflow = utils.remap_input(workflow, project)
        workflow = Workflow.import_from_file(workflow)

    # Get inputs from path if needed.
    if isinstance(inputs_data, str):
        inputs_data = inputs.load_json_inputs(inputs_data)

    # Inject inputs if any provided.
    if inputs_data is not None:
        workflow = copy.deepcopy(workflow)
        inputs.inject_graph_inputs(
            workflow.execution_graph,
            inputs_data,
        )

    # Identify renderfarm manager from dispatch graph.
    try:
        dispatch_graph = workflow.dispatch_graphs[0]  # default
    except IndexError:
        raise ValueError(
            f"Workflow {workflow.name} does not define any dispatch graphs."
        )

    if dispatch_graph_name:
        if dispatch_graph_name not in workflow.dispatch_graph_names:
            raise ValueError(
                f"Workflow {workflow.name} does not define "
                f"dispatch graph: {dispatch_graph_name}. Available "
                f"dispatch graphs are {workflow.dispatch_graph_names}."
            )
        gidx = workflow.dispatch_graph_names.index(dispatch_graph_name)
        dispatch_graph = workflow.dispatch_graphs[gidx]

    rfarm_manager = dispatch_graph.get_associated_manager()
    submit_fn = _get_submit_function(rfarm_manager)

    # Convert workflow to job description.
    job_desc = job_description.to_job_description(
        workflow,
        dispatch_graph,
        backend_dir=backend_dir,
        project_name=project,
    )

    # Submit job description to renderfarm
    log = log or logging.getLogger()
    submit_fn(
        job_desc,
        log,
    )