Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deadline: replace env var with field from Settigns #518

Merged
merged 5 commits into from
May 20, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
35 changes: 13 additions & 22 deletions client/ayon_core/modules/deadline/abstract_submit_deadline.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,11 @@
JSONDecodeError = getattr(json.decoder, "JSONDecodeError", ValueError)


# TODO both 'requests_post' and 'requests_get' should not set 'verify' based
# on environment variable. This should be done in a more controlled way,
# e.g. each deadline url could have checkbox to enabled/disable
# ssl verification.
def requests_post(*args, **kwargs):
"""Wrap request post method.

Disabling SSL certificate validation if ``DONT_VERIFY_SSL`` environment
variable is found. This is useful when Deadline server is
Disabling SSL certificate validation if ``verify`` kwarg is set to False.
This is useful when Deadline server is
running with self-signed certificates and its certificate is not
added to trusted certificates on client machines.

Expand All @@ -46,10 +42,6 @@ def requests_post(*args, **kwargs):
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

auth = kwargs.get("auth")
if auth:
kwargs["auth"] = tuple(auth) # explicit cast to tuple
Expand All @@ -61,8 +53,8 @@ def requests_post(*args, **kwargs):
def requests_get(*args, **kwargs):
"""Wrap request get method.

Disabling SSL certificate validation if ``DONT_VERIFY_SSL`` environment
variable is found. This is useful when Deadline server is
Disabling SSL certificate validation if ``verify`` kwarg is set to False.
This is useful when Deadline server is
running with self-signed certificates and its certificate is not
added to trusted certificates on client machines.

Expand All @@ -71,9 +63,6 @@ def requests_get(*args, **kwargs):
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
auth = kwargs.get("auth")
if auth:
kwargs["auth"] = tuple(auth)
Expand Down Expand Up @@ -466,7 +455,8 @@ def process(self, instance):
self.aux_files = self.get_aux_files()

auth = instance.data["deadline"]["auth"]
job_id = self.process_submission(auth)
verify = instance.data["deadline"]["verify"]
job_id = self.process_submission(auth, verify)
self.log.info("Submitted job to Deadline: {}.".format(job_id))

# TODO: Find a way that's more generic and not render type specific
Expand All @@ -479,10 +469,10 @@ def process(self, instance):
job_info=render_job_info,
plugin_info=render_plugin_info
)
render_job_id = self.submit(payload, auth)
render_job_id = self.submit(payload, auth, verify)
self.log.info("Render job id: %s", render_job_id)

def process_submission(self, auth=None):
def process_submission(self, auth=None, verify=True):
"""Process data for submission.

This takes Deadline JobInfo, PluginInfo, AuxFile, creates payload
Expand All @@ -493,7 +483,7 @@ def process_submission(self, auth=None):

"""
payload = self.assemble_payload()
return self.submit(payload, auth)
return self.submit(payload, auth, verify)

@abstractmethod
def get_job_info(self):
Expand Down Expand Up @@ -583,7 +573,7 @@ def assemble_payload(
"AuxFiles": aux_files or self.aux_files
}

def submit(self, payload, auth):
def submit(self, payload, auth, verify):
"""Submit payload to Deadline API end-point.

This takes payload in the form of JSON file and POST it to
Expand All @@ -592,6 +582,7 @@ def submit(self, payload, auth):
Args:
payload (dict): dict to become json in deadline submission.
auth (tuple): (username, password)
verify (bool): verify SSL certificate if present

Returns:
str: resulting Deadline job id.
Expand All @@ -601,8 +592,8 @@ def submit(self, payload, auth):

"""
url = "{}/api/jobs".format(self._deadline_url)
response = requests_post(url, json=payload,
auth=auth)
response = requests_post(
url, json=payload, auth=auth, verify=verify)
if not response.ok:
self.log.error("Submission failed!")
self.log.error(response.status_code)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ def process(self, instance):
)
instance.data["deadline"]["auth"] = None

instance.data["deadline"]["verify"] = (
not deadline_info["not_verify_ssl"])

if not deadline_info["require_authentication"]:
return
# TODO import 'get_addon_site_settings' when available
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,9 @@ def process_submission(self):
instance.data["toBeRenderedOn"] = "deadline"

payload = self.assemble_payload()
return self.submit(payload,
auth=instance.data["deadline"]["auth"])
auth = instance.data["deadline"]["auth"]
verify = instance.data["deadline"]["verify"]
return self.submit(payload, auth=auth, verify=verify)

def from_published_scene(self):
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,11 @@ def payload_submit(self,
self.expected_files(instance, render_path)
self.log.debug("__ expectedFiles: `{}`".format(
instance.data["expectedFiles"]))

auth = instance.data["deadline"]["auth"]
verify = instance.data["deadline"]["verify"]
response = requests_post(self.deadline_url, json=payload,
auth=instance.data["deadline"]["require_authentication"])
auth=auth,
verify=verify)

if not response.ok:
self.log.error(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,8 @@ def process(self, instance):
# E.g. http://192.168.0.1:8082/api/jobs
url = "{}/api/jobs".format(deadline_url)
auth = instance.data["deadline"]["auth"]
response = requests_post(url, json=payload, auth=auth)
verify = instance.data["deadline"]["verify"]
response = requests_post(url, json=payload, auth=auth, verify=verify)
if not response.ok:
raise Exception(response.text)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,19 +181,27 @@ def process_submission(self):

self.log.debug("Submitting 3dsMax render..")
project_settings = instance.context.data["project_settings"]
auth = instance.data["deadline"]["auth"]
verify = instance.data["deadline"]["verify"]
if instance.data.get("multiCamera"):
self.log.debug("Submitting jobs for multiple cameras..")
payload = self._use_published_name_for_multiples(
payload_data, project_settings)
job_infos, plugin_infos = payload
for job_info, plugin_info in zip(job_infos, plugin_infos):
self.submit(self.assemble_payload(job_info, plugin_info),
instance.data["deadline"]["auth"])
self.submit(
self.assemble_payload(job_info, plugin_info),
auth=auth,
verify=verify
)
else:
payload = self._use_published_name(payload_data, project_settings)
job_info, plugin_info = payload
self.submit(self.assemble_payload(job_info, plugin_info),
instance.data["deadline"]["auth"])
self.submit(
self.assemble_payload(job_info, plugin_info),
auth=auth,
verify=verify
)

def _use_published_name(self, data, project_settings):
# Not all hosts can import these modules.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ def get_plugin_info(self):

return plugin_payload

def process_submission(self, auth=None):
def process_submission(self, auth=None, verify=True):
from maya import cmds
instance = self._instance

Expand Down Expand Up @@ -332,8 +332,10 @@ def process_submission(self, auth=None):
if "vrayscene" in instance.data["families"]:
self.log.debug("Submitting V-Ray scene render..")
vray_export_payload = self._get_vray_export_payload(payload_data)

export_job = self.submit(vray_export_payload,
instance.data["deadline"]["auth"])
auth=auth,
verify=verify)

payload = self._get_vray_render_payload(payload_data)

Expand All @@ -353,7 +355,8 @@ def process_submission(self, auth=None):
# Submit main render job
job_info, plugin_info = payload
self.submit(self.assemble_payload(job_info, plugin_info),
instance.data["deadline"]["auth"])
auth=auth,
verify=verify)

def _tile_render(self, payload):
"""Submit as tile render per frame with dependent assembly jobs."""
Expand Down Expand Up @@ -557,13 +560,18 @@ def _tile_render(self, payload):
# Submit assembly jobs
assembly_job_ids = []
num_assemblies = len(assembly_payloads)
auth = instance.data["deadline"]["auth"]
verify = instance.data["deadline"]["verify"]
for i, payload in enumerate(assembly_payloads):
self.log.debug(
"submitting assembly job {} of {}".format(i + 1,
num_assemblies)
)
assembly_job_id = self.submit(payload,
instance.data["deadline"]["auth"])
assembly_job_id = self.submit(
payload,
auth=auth,
verify=verify
)
assembly_job_ids.append(assembly_job_id)

instance.data["assemblySubmissionJobs"] = assembly_job_ids
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,8 +424,12 @@ def payload_submit(
self.log.debug("__ expectedFiles: `{}`".format(
instance.data["expectedFiles"]))
auth = instance.data["deadline"]["auth"]
response = requests_post(self.deadline_url, json=payload, timeout=10,
auth=auth)
verify = instance.data["deadline"]["verify"]
response = requests_post(self.deadline_url,
json=payload,
timeout=10,
auth=auth,
verify=verify)

if not response.ok:
raise Exception(response.text)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,8 +210,9 @@ def _submit_deadline_post_job(self, instance, job):

url = "{}/api/jobs".format(self.deadline_url)
auth = instance.data["deadline"]["auth"]
response = requests_post(url, json=payload, timeout=10,
auth=auth)
verify = instance.data["deadline"]["verify"]
response = requests_post(
url, json=payload, timeout=10, auth=auth, verify=verify)
if not response.ok:
raise Exception(response.text)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -304,8 +304,9 @@ def _submit_deadline_post_job(self, instance, job, instances):

url = "{}/api/jobs".format(self.deadline_url)
auth = instance.data["deadline"]["auth"]
response = requests_post(url, json=payload, timeout=10,
auth=auth)
verify = instance.data["deadline"]["verify"]
response = requests_post(
url, json=payload, timeout=10, auth=auth, verify=verify)
if not response.ok:
raise Exception(response.text)

Expand Down
2 changes: 1 addition & 1 deletion server_addon/deadline/package.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
name = "deadline"
title = "Deadline"
version = "0.1.11"
version = "0.1.12"
9 changes: 4 additions & 5 deletions server_addon/deadline/server/settings/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,9 @@ class ServerItemSubmodel(BaseSettingsModel):
name: str = SettingsField(title="Name")
value: str = SettingsField(title="Url")
require_authentication: bool = SettingsField(
False,
title="Require authentication")
ssl: bool = SettingsField(False,
title="SSL")
False, title="Require authentication")
not_verify_ssl: bool = SettingsField(
False, title="Don't verify SSL")


class DeadlineSettings(BaseSettingsModel):
Expand Down Expand Up @@ -78,7 +77,7 @@ def validate_unique_names(cls, value):
"name": "default",
"value": "http://127.0.0.1:8082",
"require_authentication": False,
"ssl": False
"not_verify_ssl": False
}
],
"deadline_server": "default",
Expand Down