Project

General

Profile

Feature #37530

Updated by Ernesto Puerta over 5 years ago

h3. Description 

 * Provides support for disabling/enabling _features_ from the Ceph-dashboard by means of configuration changes. 
 * In this context _features_ should be primarily considered from UI perspective and include at least: 
 ** Single components (e.g.: iSCSI) 
 ** _Optionally_: Sets of related components (e.g: RBD comprising Images, Mirroring & iSCSI). This could also be enabled/disabled on a per-component basis. 
 * Takes precedence over Role Based Authorization: features are either enabled/disabled for all users. 
 * No need for an instant effect: a Ceph-mgr or module reload could happen if needed. However, no code changes or builds should be needed. 
 * No need to disable back-end functionality too. 

 h3. User Stories 

 Feature toggles bring in benefits for a lots of user personas: 

 * As a System Administrator I want to disable Ceph components I don't have deployed (e.g: iSCSI) so that the dashboard only reflects the relevant information and workflows. 
 * As a Ceph Distributor, I want to disable Ceph elements I don't support (e.g.: CephFS). 
 * As a Back-end Developer I want to disable a new experimental feature so that I don't break/interfere with other ongoing developments, or deployments. 
 * As a UI/UX Designer I want disable an improved feature so that I can run an A/B test to quickly gather feedback from the same build. 

 h3. References 

 * "Feature Toggles by Martin Fowler":https://martinfowler.com/articles/feature-toggles.html 

 h3. Implementation tips 

 * Ceph-mgr "config options":http://docs.ceph.com/docs/nautilus/mgr/plugins/#configuration-options provide an easy (CLI) a way to set/unset settings. disable features. 
 * Options names can describe component hierarchies: @RBD@ enables/disables @RBD_IMAGES@, @RBD_MIRRORING@, @RBD_ISCSI@. 
 * For a front-end only feature toggle, there's a "PR ongoing":https://github.com/ceph/ceph/pull/25327 providing a @SettingsService@ for accessing Ceph-Mgr Config Options. 
 * For a back-end support, it should be easy to extend the @ApiController@/@RESTController@ for enabling/disabling them.

Back