From 4f4a695567a985f3b032ca7fe50ee4db6159fa9a Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 1 Jul 2024 15:27:49 +0200 Subject: [PATCH 1/6] AY-5714 - added default deadline username and password to Settings These values should be used if studio has only single credentials for communicating with Deadline webservice. --- server_addon/deadline/server/settings/main.py | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/server_addon/deadline/server/settings/main.py b/server_addon/deadline/server/settings/main.py index 47ad72a86f..53d2234ac7 100644 --- a/server_addon/deadline/server/settings/main.py +++ b/server_addon/deadline/server/settings/main.py @@ -6,6 +6,7 @@ SettingsField, ensure_unique_names, ) +from ayon_server.settings.enum import secrets_enum if TYPE_CHECKING: from ayon_server.addons import BaseServerAddon @@ -34,13 +35,26 @@ async def defined_deadline_ws_name_enum_resolver( class ServerItemSubmodel(BaseSettingsModel): """Connection info about configured DL servers.""" - _layout = "compact" + _layout = "expanded" name: str = SettingsField(title="Name") value: str = SettingsField(title="Url") require_authentication: bool = SettingsField( False, title="Require authentication") not_verify_ssl: bool = SettingsField( False, title="Don't verify SSL") + default_username: str = SettingsField( + title="Default user name", + description="Webservice username, 'Require authentication' must be " + "enabled." + ) + default_password: str = SettingsField( + "", + placeholder="Select password from Ayon secrets", + enum_resolver=secrets_enum, + title="Default password", + description="Webservice password, 'Require authentication' must be " + "enabled." + ) class DeadlineSettings(BaseSettingsModel): @@ -77,7 +91,10 @@ def validate_unique_names(cls, value): "name": "default", "value": "http://127.0.0.1:8082", "require_authentication": False, - "not_verify_ssl": False + "not_verify_ssl": False, + "default_username": "", + "default_password": "" + } ], "deadline_server": "default", From e9f1e7475709ed0521eb57bf4168c3558adc50da Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 1 Jul 2024 15:28:28 +0200 Subject: [PATCH 2/6] AY-5714 - collect default deadline username and password from Settings These values should be used if studio has only single credentials for communicating with Deadline webservice. Could be overridden by values from Site Settings. --- .../publish/collect_user_credentials.py | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py b/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py index ab96ba5828..765f018846 100644 --- a/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py +++ b/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py @@ -12,13 +12,18 @@ """ import pyblish.api -from ayon_api import get_server_api_connection +from ayon_api import get_server_api_connection, get_secret +from ayon_core.pipeline import KnownPublishError from ayon_deadline.lib import FARM_FAMILIES class CollectDeadlineUserCredentials(pyblish.api.InstancePlugin): """Collects user name and password for artist if DL requires authentication + + If Deadline server is marked to require authentication, it looks first for + default values in 'Studio Settings', which could be overriden by artist + dependent values from 'Site settings`. """ order = pyblish.api.CollectorOrder + 0.250 label = "Collect Deadline User Credentials" @@ -72,6 +77,18 @@ def process(self, instance): addons_manager = instance.context.data["ayonAddonsManager"] deadline_addon = addons_manager["deadline"] + + default_username = deadline_info["default_username"] + secret_name = deadline_info["default_password"] + secret = get_secret(secret_name) + if not secret: + raise KnownPublishError(f"'{secret_name}' secret not found") + default_password = secret["value"] + if default_username and default_password: + self.log.debug("Setting credentials from defaults") + instance.data["deadline"]["auth"] = (default_username, + default_password) + # TODO import 'get_addon_site_settings' when available # in public 'ayon_api' local_settings = get_server_api_connection().get_addon_site_settings( @@ -79,5 +96,8 @@ def process(self, instance): local_settings = local_settings["local_settings"] for server_info in local_settings: if deadline_server_name == server_info["server_name"]: - instance.data["deadline"]["auth"] = (server_info["username"], - server_info["password"]) + if server_info["username"] and server_info["password"]: + self.log.debug("Setting credentials from Site Settings") + instance.data["deadline"]["auth"] = \ + (server_info["username"], server_info["password"]) + break From 5b1c785eacdecdc766f7bbdafbe26dae9a7e5131 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 2 Jul 2024 13:52:30 +0200 Subject: [PATCH 3/6] Bump version of deadline Added default user credentials --- server_addon/deadline/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/deadline/package.py b/server_addon/deadline/package.py index dcc61e3d46..8fcc007850 100644 --- a/server_addon/deadline/package.py +++ b/server_addon/deadline/package.py @@ -1,6 +1,6 @@ name = "deadline" title = "Deadline" -version = "0.2.2" +version = "0.2.3" client_dir = "ayon_deadline" From 550cb51169a781ce21c3378741ca9de1059481e3 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 2 Jul 2024 14:20:52 +0200 Subject: [PATCH 4/6] Fix default value for default_username --- server_addon/deadline/server/settings/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/server_addon/deadline/server/settings/main.py b/server_addon/deadline/server/settings/main.py index 53d2234ac7..dcd7cd75dd 100644 --- a/server_addon/deadline/server/settings/main.py +++ b/server_addon/deadline/server/settings/main.py @@ -43,6 +43,7 @@ class ServerItemSubmodel(BaseSettingsModel): not_verify_ssl: bool = SettingsField( False, title="Don't verify SSL") default_username: str = SettingsField( + "", title="Default user name", description="Webservice username, 'Require authentication' must be " "enabled." From 00f5bd022678fca4dde9db6a8cb464e9f2ad9dc2 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 2 Jul 2024 14:21:59 +0200 Subject: [PATCH 5/6] Bump even client version --- server_addon/deadline/client/ayon_deadline/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_addon/deadline/client/ayon_deadline/version.py b/server_addon/deadline/client/ayon_deadline/version.py index e131427f12..96262d7186 100644 --- a/server_addon/deadline/client/ayon_deadline/version.py +++ b/server_addon/deadline/client/ayon_deadline/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'deadline' version.""" -__version__ = "0.2.2" +__version__ = "0.2.3" From 1ab079778fad343949ac45ecbc5722e50e964112 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 2 Jul 2024 17:59:31 +0200 Subject: [PATCH 6/6] Reverted use of secrets for deadline password Regular artists don't have access to AYON secret, therefore it cannot be used. Encrypted or at least crossed field for passwords doesn't exist so far. --- .../plugins/publish/collect_user_credentials.py | 9 ++------- server_addon/deadline/server/settings/main.py | 3 --- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py b/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py index 765f018846..1c59c178d3 100644 --- a/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py +++ b/server_addon/deadline/client/ayon_deadline/plugins/publish/collect_user_credentials.py @@ -12,8 +12,7 @@ """ import pyblish.api -from ayon_api import get_server_api_connection, get_secret -from ayon_core.pipeline import KnownPublishError +from ayon_api import get_server_api_connection from ayon_deadline.lib import FARM_FAMILIES @@ -79,11 +78,7 @@ def process(self, instance): deadline_addon = addons_manager["deadline"] default_username = deadline_info["default_username"] - secret_name = deadline_info["default_password"] - secret = get_secret(secret_name) - if not secret: - raise KnownPublishError(f"'{secret_name}' secret not found") - default_password = secret["value"] + default_password = deadline_info["default_password"] if default_username and default_password: self.log.debug("Setting credentials from defaults") instance.data["deadline"]["auth"] = (default_username, diff --git a/server_addon/deadline/server/settings/main.py b/server_addon/deadline/server/settings/main.py index dcd7cd75dd..edb8a16e35 100644 --- a/server_addon/deadline/server/settings/main.py +++ b/server_addon/deadline/server/settings/main.py @@ -6,7 +6,6 @@ SettingsField, ensure_unique_names, ) -from ayon_server.settings.enum import secrets_enum if TYPE_CHECKING: from ayon_server.addons import BaseServerAddon @@ -50,8 +49,6 @@ class ServerItemSubmodel(BaseSettingsModel): ) default_password: str = SettingsField( "", - placeholder="Select password from Ayon secrets", - enum_resolver=secrets_enum, title="Default password", description="Webservice password, 'Require authentication' must be " "enabled."