How To Separate Dynflow component into docker container?

Hi all,

Probably a little confusing question below but ultimately trying to find a workaround for Ubuntu 18.04 Foreman setup while using plugins/features relying on dynflow, which has a bug due to ruby-concurrent upstream issues (Bug #27097: foreman-proxy not launching because of 'uninitialized constant ForemanTasksCore::TaskLauncher' - foreman-tasks - Foreman). I want to push components that have the upstream dependency issues into a smart proxy deployed in a container, while keeping the UI / other stuff running on Ubuntu 18.04 host itself.

After learning a little bit more about foreman architecture, it seemed like a workaround would be to create a smart proxy in a docker container that I can run somewhere that I can use a different base OS for and get running, and use that smart proxy in combination with the original foreman installation.

I have a docker container with remote-execution / dynflow set up that seems to run the process without errors, but I can’t figure out how to get the tasks UI options available to actually run and execute tasks for foreman-tasks. Not sure what happened as I’ve installed / uninstalled these things a few times on original host trying to get going. It used to be there (but wouldn’t execute) but now all foreman tasks/job related features in the UI are missing.

Can someone point me in the right direction to get this running? What needs to be enabled on the ubuntu host vs. the smart proxy? I also see specific to dynflow there should be smart_proxy_dynflow and smart_proxy_dynflow_core. If I need to run smart_proxy_dynflow on the foreman host (with UI) while running smart_proxy_dynflow_core within the smart proxy (in docker), I’m not sure how to configure that on host since there is just a single config file for dynflow with enabled/disabled and core_url, but even after changing core_url to where smart proxy lives it is still tossing ruby-concurrent errors on the host from within dynflow-core, so it seems to be trying to run everything on host.

Think I’ve solved it.

  1. On foreman host (ubuntu 18.04) you can install plugins not requiring dynflow. Also include the remote execution plugin (this enables the UI aspects). You should not need dynflow/remote execution ssh/etc. running on the ubuntu host.

  2. Within docker container, build a smart proxy with dynflow, remote execution ssh plugin, ansible (and so on).

This is really the core of it. There is no separation needed for smart_proxy_dynflow / smart_proxy_dynflow_core or any of that. Smart proxy within docker container will need to be set up like a separate smart proxy and all settings.yml configured appropriately (foreman_url, ssl certs, etc), but other than that it works as expected.