Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Deadline: reworked pools assignment #3051

Merged
merged 13 commits into from
Apr 13, 2022
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class AERenderInstance(RenderInstance):

class CollectAERender(abstract_collect_render.AbstractCollectRender):

order = pyblish.api.CollectorOrder + 0.498
order = pyblish.api.CollectorOrder + 0.400
label = "Collect After Effects Render Layers"
hosts = ["aftereffects"]

Expand Down
79 changes: 9 additions & 70 deletions openpype/hosts/maya/plugins/create/create_render.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import json
import appdirs
import requests
import six
import sys

from maya import cmds
import maya.app.renderSetup.model.renderSetup as renderSetup
Expand All @@ -14,6 +12,7 @@
lib,
plugin
)
from openpype.lib import requests_get
from openpype.api import (
get_system_settings,
get_project_settings,
Expand Down Expand Up @@ -117,6 +116,8 @@ def __init__(self, *args, **kwargs):
except KeyError:
self.aov_separator = "_"

manager = ModulesManager()
self.deadline_module = manager.modules_by_name["deadline"]
try:
default_servers = deadline_settings["deadline_urls"]
project_servers = (
Expand All @@ -133,10 +134,8 @@ def __init__(self, *args, **kwargs):

except AttributeError:
# Handle situation were we had only one url for deadline.
manager = ModulesManager()
deadline_module = manager.modules_by_name["deadline"]
# get default deadline webservice url from deadline module
self.deadline_servers = deadline_module.deadline_urls
self.deadline_servers = self.deadline_module.deadline_urls

def process(self):
"""Entry point."""
Expand Down Expand Up @@ -211,7 +210,7 @@ def _deadline_webservice_changed(self):
cmds.getAttr("{}.deadlineServers".format(self.instance))
]
]
pools = self._get_deadline_pools(webservice)
pools = self.deadline_module.get_deadline_pools(webservice, self.log)
cmds.deleteAttr("{}.primaryPool".format(self.instance))
cmds.deleteAttr("{}.secondaryPool".format(self.instance))
cmds.addAttr(self.instance, longName="primaryPool",
Expand All @@ -221,33 +220,6 @@ def _deadline_webservice_changed(self):
attributeType="enum",
enumName=":".join(["-"] + pools))

def _get_deadline_pools(self, webservice):
# type: (str) -> list
"""Get pools from Deadline.
Args:
webservice (str): Server url.
Returns:
list: Pools.
Throws:
RuntimeError: If deadline webservice is unreachable.

"""
argument = "{}/api/pools?NamesOnly=true".format(webservice)
try:
response = self._requests_get(argument)
except requests.exceptions.ConnectionError as exc:
msg = 'Cannot connect to deadline web service'
self.log.error(msg)
six.reraise(
RuntimeError,
RuntimeError('{} - {}'.format(msg, exc)),
sys.exc_info()[2])
if not response.ok:
self.log.warning("No pools retrieved")
return []

return response.json()

def _create_render_settings(self):
"""Create instance settings."""
# get pools
Expand Down Expand Up @@ -295,7 +267,8 @@ def _create_render_settings(self):
# use first one for initial list of pools.
deadline_url = next(iter(self.deadline_servers.values()))

pool_names = self._get_deadline_pools(deadline_url)
pool_names = self.deadline_module.get_deadline_pools(deadline_url,
self.log)
maya_submit_dl = self._project_settings.get(
"deadline", {}).get(
"publish", {}).get(
Expand Down Expand Up @@ -366,7 +339,7 @@ def _get_muster_pools(self):
"""
params = {"authToken": self._token}
api_entry = "/api/pools/list"
response = self._requests_get(self.MUSTER_REST_URL + api_entry,
response = requests_get(self.MUSTER_REST_URL + api_entry,
params=params)
if response.status_code != 200:
if response.status_code == 401:
Expand All @@ -392,45 +365,11 @@ def _show_login(self):
api_url = "{}/muster/show_login".format(
os.environ["OPENPYPE_WEBSERVER_URL"])
self.log.debug(api_url)
login_response = self._requests_get(api_url, timeout=1)
login_response = requests_get(api_url, timeout=1)
if login_response.status_code != 200:
self.log.error("Cannot show login form to Muster")
raise Exception("Cannot show login form to Muster")

def _requests_post(self, *args, **kwargs):
"""Wrap request post method.

Disabling SSL certificate validation if ``DONT_VERIFY_SSL`` environment
variable is found. This is useful when Deadline or Muster server are
running with self-signed certificates and their certificate is not
added to trusted certificates on client machines.

Warning:
Disabling SSL certificate validation is defeating one line
of defense SSL is providing and it is not recommended.

"""
if "verify" not in kwargs:
kwargs["verify"] = not os.getenv("OPENPYPE_DONT_VERIFY_SSL", True)
return requests.post(*args, **kwargs)

def _requests_get(self, *args, **kwargs):
"""Wrap request get method.

Disabling SSL certificate validation if ``DONT_VERIFY_SSL`` environment
variable is found. This is useful when Deadline or Muster server are
running with self-signed certificates and their certificate is not
added to trusted certificates on client machines.

Warning:
Disabling SSL certificate validation is defeating one line
of defense SSL is providing and it is not recommended.

"""
if "verify" not in kwargs:
kwargs["verify"] = not os.getenv("OPENPYPE_DONT_VERIFY_SSL", True)
return requests.get(*args, **kwargs)

def _set_default_renderer_settings(self, renderer):
"""Set basic settings based on renderer.

Expand Down
86 changes: 11 additions & 75 deletions openpype/hosts/maya/plugins/create/create_vrayscene.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import json
import appdirs
import requests
import six
import sys

from maya import cmds
import maya.app.renderSetup.model.renderSetup as renderSetup
Expand All @@ -19,6 +17,7 @@
get_project_settings
)

from openpype.lib import requests_get
from openpype.pipeline import CreatorError
from openpype.modules import ModulesManager

Expand All @@ -40,6 +39,10 @@ def __init__(self, *args, **kwargs):
self._rs = renderSetup.instance()
self.data["exportOnFarm"] = False
deadline_settings = get_system_settings()["modules"]["deadline"]

manager = ModulesManager()
self.deadline_module = manager.modules_by_name["deadline"]

if not deadline_settings["enabled"]:
self.deadline_servers = {}
return
Expand All @@ -62,10 +65,8 @@ def __init__(self, *args, **kwargs):

except AttributeError:
# Handle situation were we had only one url for deadline.
manager = ModulesManager()
deadline_module = manager.modules_by_name["deadline"]
# get default deadline webservice url from deadline module
self.deadline_servers = deadline_module.deadline_urls
self.deadline_servers = self.deadline_module.deadline_urls

def process(self):
"""Entry point."""
Expand Down Expand Up @@ -128,7 +129,7 @@ def _deadline_webservice_changed(self):
cmds.getAttr("{}.deadlineServers".format(self.instance))
]
]
pools = self._get_deadline_pools(webservice)
pools = self.deadline_module.get_deadline_pools(webservice)
cmds.deleteAttr("{}.primaryPool".format(self.instance))
cmds.deleteAttr("{}.secondaryPool".format(self.instance))
cmds.addAttr(self.instance, longName="primaryPool",
Expand All @@ -138,33 +139,6 @@ def _deadline_webservice_changed(self):
attributeType="enum",
enumName=":".join(["-"] + pools))

def _get_deadline_pools(self, webservice):
# type: (str) -> list
"""Get pools from Deadline.
Args:
webservice (str): Server url.
Returns:
list: Pools.
Throws:
RuntimeError: If deadline webservice is unreachable.

"""
argument = "{}/api/pools?NamesOnly=true".format(webservice)
try:
response = self._requests_get(argument)
except requests.exceptions.ConnectionError as exc:
msg = 'Cannot connect to deadline web service'
self.log.error(msg)
six.reraise(
CreatorError,
CreatorError('{} - {}'.format(msg, exc)),
sys.exc_info()[2])
if not response.ok:
self.log.warning("No pools retrieved")
return []

return response.json()

def _create_vray_instance_settings(self):
# get pools
pools = []
Expand Down Expand Up @@ -195,7 +169,7 @@ def _create_vray_instance_settings(self):
for k in self.deadline_servers.keys()
][0]

pool_names = self._get_deadline_pools(deadline_url)
pool_names = self.deadline_module.get_deadline_pools(deadline_url)

if muster_enabled:
self.log.info(">>> Loading Muster credentials ...")
Expand Down Expand Up @@ -259,8 +233,8 @@ def _get_muster_pools(self):
"""
params = {"authToken": self._token}
api_entry = "/api/pools/list"
response = self._requests_get(self.MUSTER_REST_URL + api_entry,
params=params)
response = requests_get(self.MUSTER_REST_URL + api_entry,
params=params)
if response.status_code != 200:
if response.status_code == 401:
self.log.warning("Authentication token expired.")
Expand All @@ -285,45 +259,7 @@ def _show_login(self):
api_url = "{}/muster/show_login".format(
os.environ["OPENPYPE_WEBSERVER_URL"])
self.log.debug(api_url)
login_response = self._requests_get(api_url, timeout=1)
login_response = requests_get(api_url, timeout=1)
if login_response.status_code != 200:
self.log.error("Cannot show login form to Muster")
raise CreatorError("Cannot show login form to Muster")

def _requests_post(self, *args, **kwargs):
"""Wrap request post method.

Disabling SSL certificate validation if ``DONT_VERIFY_SSL`` environment
variable is found. This is useful when Deadline or Muster server are
running with self-signed certificates and their certificate is not
added to trusted certificates on client machines.

Warning:
Disabling SSL certificate validation is defeating one line
of defense SSL is providing and it is not recommended.

"""
if "verify" not in kwargs:
kwargs["verify"] = (
False if os.getenv("OPENPYPE_DONT_VERIFY_SSL", True) else True
) # noqa
return requests.post(*args, **kwargs)

def _requests_get(self, *args, **kwargs):
"""Wrap request get method.

Disabling SSL certificate validation if ``DONT_VERIFY_SSL`` environment
variable is found. This is useful when Deadline or Muster server are
running with self-signed certificates and their certificate is not
added to trusted certificates on client machines.

Warning:
Disabling SSL certificate validation is defeating one line
of defense SSL is providing and it is not recommended.

"""
if "verify" not in kwargs:
kwargs["verify"] = (
False if os.getenv("OPENPYPE_DONT_VERIFY_SSL", True) else True
) # noqa
return requests.get(*args, **kwargs)
6 changes: 6 additions & 0 deletions openpype/hosts/maya/plugins/publish/collect_render.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,12 @@ def process(self, context):
overrides = self.parse_options(str(render_globals))
data.update(**overrides)

# get string values for pools
primary_pool = overrides["renderGlobals"]["Pool"]
secondary_pool = overrides["renderGlobals"]["SecondaryPool"]
data["primaryPool"] = primary_pool
data["secondaryPool"] = secondary_pool

# Define nice label
label = "{0} ({1})".format(expected_layer_name, data["asset"])
label += " [{0}-{1}]".format(
Expand Down
19 changes: 3 additions & 16 deletions openpype/hosts/maya/plugins/publish/submit_maya_muster.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
import platform

import appdirs
import requests

from maya import cmds

from avalon import api

import pyblish.api
from openpype.lib import requests_post
from openpype.hosts.maya.api import lib
from openpype.api import get_system_settings

Expand Down Expand Up @@ -184,7 +184,7 @@ def _get_templates(self):
"select": "name"
}
api_entry = '/api/templates/list'
response = self._requests_post(
response = requests_post(
self.MUSTER_REST_URL + api_entry, params=params)
if response.status_code != 200:
self.log.error(
Expand Down Expand Up @@ -235,7 +235,7 @@ def _submit(self, payload):
"name": "submit"
}
api_entry = '/api/queue/actions'
response = self._requests_post(
response = requests_post(
self.MUSTER_REST_URL + api_entry, params=params, json=payload)

if response.status_code != 200:
Expand Down Expand Up @@ -549,16 +549,3 @@ def preflight_check(self, instance):
% (value, int(value))
)

def _requests_post(self, *args, **kwargs):
""" Wrapper for requests, disabling SSL certificate validation if
DONT_VERIFY_SSL environment variable is found. This is useful when
Deadline or Muster server are running with self-signed certificates
and their certificate is not added to trusted certificates on
client machines.

WARNING: disabling SSL certificate validation is defeating one line
of defense SSL is providing and it is not recommended.
"""
if 'verify' not in kwargs:
kwargs['verify'] = False if os.getenv("OPENPYPE_DONT_VERIFY_SSL", True) else True # noqa
return requests.post(*args, **kwargs)
Loading