** Changed in: horizon
   Importance: Medium => Wishlist

** Changed in: horizon
       Status: In Progress => Invalid

** Changed in: horizon
     Assignee: Travis Tripp (travis-tripp) => (unassigned)

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Dashboard (Horizon).
https://bugs.launchpad.net/bugs/1450940

Title:
  Refactor angular features enablement

Status in OpenStack Dashboard (Horizon):
  Invalid

Bug description:
  LAUNCH_INSTANCE_NG_ENABLED & LAUNCH_INSTANCE_LEGACY_ENABLED
  were added as new feature toggles in Kilo. We added multiple
  spots on the python code that looks it up in a rather non-declarative
  and non abstract way. We also just created a generic settings
  angular service. This worked, but now we are thinking about
  ways to standardize on this concept so that a common features
  API on the Python side and angular side can be used abstract
  looking up whether or not a feature is enabled. This provides
  better abstraction and isolation between code that needs to know
  if a feature is enabled or not and will allow more standardization
  or logic in the future to determine whether or not a feature is enabled
  with less likelihood of having to rewrite all existing code.

  This is not intended to replace all existing settings in settings.py.

  For example, current feature lookup on python side looks like this:

  getattr(settings, 'LAUNCH_INSTANCE_LEGACY_ENABLED', True):

  It would be better if we can simply say:

  features.enabled('LAUNCH_INSTANCE_LEGACY', True)

  Similarly on the angular side, you inject a settings service which has
  a pretty direct binding to the underlying python settings.  Using and
  injecting a Feature service will allow us to use different
  methodologies in the future without having to change code.  It will
  provide an abstraction layer.

  To support standard settings service lookups, we will create a common
  features area under local_settings.py with the following structure:

  FEATURE = {
      'LAUNCH_INSTANCE_NG': {
          'enabled': True,
      },
      'IDENTITY_USERS_TABLE_NG': {
          'enabled': True,
      }
  }

  This will enable simple lookup using a python utility or the angular
  settings service via a helper function.

  This structure will enable much richer future fields to be added to
  describe the feature, its status, etc.  e.g.:

  FEATURES = {
      'LAUNCH_INSTANCE_NG': {
          'enabled': True,
          'description': 'super cool next gen launch instance',
          'status': 'beta'
      }
  }

  Initially, all that will determine if a feature is enabled will be the
  'enabled' toggle. But in the future other fields or logic could be
  used without disturbing the code the uses the feature utils or
  featureService.

To manage notifications about this bug go to:
https://bugs.launchpad.net/horizon/+bug/1450940/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to