Hi there,
I’m hoping someone can give me a hint on whether this is by design or a bug.
I just made the upgrade from Dragonfish to Electric Eel, and aside from one hiccup everything seems to have gone well.
I do have one issue that is related to said hiccup though. I also posted about it here:
But since this is a separate issue I don’t want to keep spamming that topic.
TLDR: In 24.04 I was already unable to change the “Deluge Downloads Storage” option. But I was able to add a Host Path mount which mounted to /downloads
instead. Whether that was intended or a bug that worked in my favour I don’t know.
What I do know however is that this same method does not work in Electric Eel, as upon saving I am presented with this lovely error message:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 509, in run
await self.future
File "/usr/lib/python3/dist-packages/middlewared/job.py", line 556, in __run_body
rv = await self.middleware.run_in_thread(self.method, *args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1367, in run_in_thread
return await self.run_in_executor(io_thread_pool_executor, method, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1364, in run_in_executor
return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/service/crud_service.py", line 268, in nf
rv = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 55, in nf
res = f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 183, in nf
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/crud.py", line 287, in do_update
app = self.update_internal(job, app, data, trigger_compose=app['state'] != 'STOPPED')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/crud.py", line 317, in update_internal
update_app_config(app_name, app['version'], new_values, custom_app=app['custom_app'])
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/ix_apps/lifecycle.py", line 59, in update_app_config
render_compose_templates(
File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/ix_apps/lifecycle.py", line 50, in render_compose_templates
raise CallError(f'Failed to render compose templates: {cp.stderr}')
middlewared.service_exception.CallError: [EFAULT] Failed to render compose templates: Traceback (most recent call last):
File "/usr/bin/apps_render_app", line 33, in <module>
sys.exit(load_entry_point('apps-validation==0.1', 'console_scripts', 'apps_render_app')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 47, in main
render_templates_from_path(args.path, args.values)
File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 19, in render_templates_from_path
rendered_data = render_templates(
^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/catalog_templating/render.py", line 36, in render_templates
).render({'ix_lib': template_libs, 'values': test_values})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 1301, in render
self.environment.handle_exception()
File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 936, in handle_exception
raise rewrite_traceback_stack(source=source)
File "/mnt/.ix-apps/app_configs/deluge/versions/1.1.8/templates/docker-compose.yaml", line 35, in top-level template code
{% do c1.add_storage(store.mount_path, store) %}
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/.ix-apps/app_configs/deluge/versions/1.1.8/templates/library/base_v2_1_14/container.py", line 273, in add_storage
self._storage.add(mount_path, config)
File "/mnt/.ix-apps/app_configs/deluge/versions/1.1.8/templates/library/base_v2_1_14/storage.py", line 89, in add
raise RenderError(f"Mount path [{mount_path}] already used for another volume mount")
base_v2_1_14.error.RenderError: Mount path [/downloads] already used for another volume mount
Obviously I understand why this is happening, but I would really like to change the path this mounts to.
I’ve done a bit of digging already, and I did notice that the deluge app … configuration(?) (for lack of a better term) sets this path to be immutable:
However, I am wondering whether this is intentional or just a mistake that carried over from the old Kubernetes chart.
Of course I can understand that maybe the idea was to protect users from changing the downloads path which would result in “orphaned” files somewhere in the .ix-apps
(and users “loosing” their download progress of course), but taking away the ability at all seems extreme for this? A warning what a change entails would probably be enough?
Does anyone have a hot tip for me if or how this path can be changed?