One of the discussions held at the Brno meetup in May revolved around merging some common plugins into Core, as well as making some existing core functionality optional.
One example of such existing functionality are Puppet, which is currently always present and displayed to users even if they don’t use Foreman for configuration management or use a different tool. Another example is provisioning. While not all users use Foreman for provisioning management, there are multiple resources and fields related to it which are always displayed. Some of them can be partially hidden by using the “unattended” setting, but this setting is relatively confusing and not well documented or tested.
If some of the existing plugins are merged into core, we will see more cases such as this - of functionality that clutters the UI and complicates workflows but isn’t being used by all users.
One of the ideas that came up in the discussion was creating some mechanism for allowing our users to define which high-level features they want to use, and than have the UI show only the relevant fields and resources. This will hopefully also help simplify workflows and code paths a bit by providing a “happy path” for each such feature that will be tested properly.
Ideally, it would also be possible to enable these at runtime using the GUI and asking the user for needed information, making the initial install simpler.
Another thought was to auto-detect which such features are enabled by looking at the resources defined (e.g. smart proxy features, compute resources, etc.) but this path may lead to a discoverability problem as users would have to first define all the prerequisits to unlock their workflows instead of selecting the workflow and requesting the required information/configuration.
It might also be good to enable plugins to define such feature or patch into existing ones.
Before we start working on implementing this, it would be good to hear from the community if this sounds like a good direction and worth the effort.
I would also be happy to hear from @Roxanne_Hoover and @terezanovotna regarding the usability aspect of this effort with respect to UX best practices.
Finally, we had some initial thoughts regarding what would be considered such “High level feature” (we could also use a better name), but there are likely others we missed - the main idea here is that we don’t want this to turn into a big mess of options that make things more complicated than they are. Some such features we were thinking of:
- Provisioning - possibly split into bare metal and virtual?
- Puppet
- Ansible
- Salt
- Chef
- Remote execution
Please comment below with further suggestions (or even just to say this sounds good to you).