From 0aa4d324dc4ea50d3a57ecfab0afeffa6fa23ecf Mon Sep 17 00:00:00 2001 From: Vincent Francoise Date: Tue, 3 May 2016 18:03:01 +0200 Subject: [PATCH] Specs for plugins-parameters In this changeset, I expose the specifications related to the blueprint plugins-parameters. Partially Implements: blueprint plugins-parameters Change-Id: I6e50b906901abaf32162af469e9d33566003b7bb --- .../class_diagram_plugin_parameters.txt | 54 ++++ ...gram_plugin_parameters_generate_config.txt | 23 ++ ...ugin_parameters_load_plugin_parameters.txt | 13 + .../class_diagram_plugin_parameters.png | Bin 0 -> 39670 bytes ...gram_plugin_parameters_generate_config.png | Bin 0 -> 23104 bytes ...ugin_parameters_load_plugin_parameters.png | Bin 0 -> 16088 bytes specs/newton/approved/plugins-parameters.rst | 247 ++++++++++++++++++ 7 files changed, 337 insertions(+) create mode 100644 doc/source/image_src/plantuml/class_diagram_plugin_parameters.txt create mode 100644 doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_generate_config.txt create mode 100644 doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_load_plugin_parameters.txt create mode 100644 doc/source/images/class_diagram_plugin_parameters.png create mode 100644 doc/source/images/sequence_diagram_plugin_parameters_generate_config.png create mode 100644 doc/source/images/sequence_diagram_plugin_parameters_load_plugin_parameters.png create mode 100644 specs/newton/approved/plugins-parameters.rst diff --git a/doc/source/image_src/plantuml/class_diagram_plugin_parameters.txt b/doc/source/image_src/plantuml/class_diagram_plugin_parameters.txt new file mode 100644 index 0000000..b4587c6 --- /dev/null +++ b/doc/source/image_src/plantuml/class_diagram_plugin_parameters.txt @@ -0,0 +1,54 @@ +@startuml + +class "Base Loader" { + {abstract} Loadable load(String name) + {abstract} HashMap list_available() +} + +class "Default Loader" { + Loadable load(String name) + HashMap list_available() +} + +class Loadable { + {abstract} {static} oslo_config.cfg.Opt[] get_config_opts() +} + +class "Base Strategy" { + {static} oslo_config.cfg.Opt[] get_config_opts() + {abstract} {static} String get_name() + {abstract} {static} String get_display_name() + {abstract} {static} String get_translatable_display_name() + {abstract} {static} String get_goal_name() + {abstract} {static} String get_goal_display_name() + {abstract} {static} String get_translatable_goal_display_name() + {abstract} Solution execute() +} + +class "Base Action" { + {static} oslo_config.cfg.Opt[] get_config_opts() + {abstract} execute() + {abstract} revert() + {abstract} precondition() + {abstract} postcondition() +} + +class "Base Planner" { + {static} oslo_config.cfg.Opt[] get_config_opts() + {abstract} ActionPlan schedule() +} + +class "Base WorkflowFlow Engine" { + {static} oslo_config.cfg.Opt[] get_config_opts() + {abstract} execute() +} + +"Base Loader" <|-- "Default Loader" +"Default Loader" ..> Loadable : " Loads" + +"Loadable" <|-- "Base Strategy" +"Loadable" <|-- "Base Action" +"Loadable" <|-- "Base Planner" +"Loadable" <|-- "Base WorkflowFlow Engine" + +@enduml diff --git a/doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_generate_config.txt b/doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_generate_config.txt new file mode 100644 index 0000000..712c4c3 --- /dev/null +++ b/doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_generate_config.txt @@ -0,0 +1,23 @@ +@startuml + +"Config file generator" -> "Watcher" : list all opts +"Watcher" -> "Watcher" : Retrieve builtin opts +"Watcher" -> "Watcher" : Retrieve builtin opts + +group Retrieve plugin opts + + loop over each plugin loader + "Watcher" -> "Default Loader" : list available plugins + + loop over each available plugin + "Default Loader" -> "Loadable" : Retrieve its config opts \ +(//get_config_opts()//) + end + end + "Default Loader" -> "Watcher" : Return plugin opts list +end + +"Watcher" -> "Watcher" : Combine builtin opts and builtin opts +"Config file generator" <-- "Watcher" : Return combined opts list + +@enduml diff --git a/doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_load_plugin_parameters.txt b/doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_load_plugin_parameters.txt new file mode 100644 index 0000000..c02c899 --- /dev/null +++ b/doc/source/image_src/plantuml/sequence_diagram_plugin_parameters_load_plugin_parameters.txt @@ -0,0 +1,13 @@ +@startuml + +"Caller" -> "Default Loader" : Load plugin given and +"Default Loader" -> "stevedore" : Find plugin entry point with given \ + and +"stevedore" -> "Default Loader" : Return //Loadable// class + +"Default Loader" -> "Config file parser" : Load plugin configuration opts +"Default Loader" <-- "Config file parser" : Return list of opts +"Default Loader" -> "Caller" : Return instantiated plugin \ +with its configuration + +@enduml diff --git a/doc/source/images/class_diagram_plugin_parameters.png b/doc/source/images/class_diagram_plugin_parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..6a3c7f935401eae0254e8ba71fdf31aea28785cc GIT binary patch literal 39670 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 J%Q~loCIBxdD2V_7 literal 0 HcmV?d00001 diff --git a/doc/source/images/sequence_diagram_plugin_parameters_generate_config.png b/doc/source/images/sequence_diagram_plugin_parameters_generate_config.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e5c1d268d8739f8d6071953e0bf8736e930efc GIT binary patch literal 23104 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 literal 0 HcmV?d00001 diff --git a/doc/source/images/sequence_diagram_plugin_parameters_load_plugin_parameters.png b/doc/source/images/sequence_diagram_plugin_parameters_load_plugin_parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7e77e886064a7c344d95e4d6d638fe67450574 GIT binary patch literal 16088 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 literal 0 HcmV?d00001 diff --git a/specs/newton/approved/plugins-parameters.rst b/specs/newton/approved/plugins-parameters.rst new file mode 100644 index 0000000..a673e28 --- /dev/null +++ b/specs/newton/approved/plugins-parameters.rst @@ -0,0 +1,247 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + +================================================================== +Allow the developer of a Watcher plugin to add specific parameters +================================================================== + +https://blueprints.launchpad.net/watcher/+spec/plugins-parameters + +In Watcher, it is possible to deploy and configure new strategies, actions, +planners, etc. and associate each "plugin" to a Python class, without having +to redeploy a new version of Watcher. + +However, it should be possible to pass some extra parameters depending of the +configuration of the OpenStack cluster or some behaviour (e.g. timeout, +weights, etc.) on which Watcher is operating. + +This is the reason why, we should give the possibility to the developer to add +some parameters depending on the configuration of OpenStack cluster on the +plugins. + + +Problem description +=================== + +As of now, all plugins that a developer implements are loaded as plain old +Python classes before being instantiated. Hence, this means that Watcher does +not pass down anything more than hardcoded parameters. So if a developer +currently wants to define a set of configuration options specific to its own +plugin, he/she would have to manually declare them. This way of doing things +causes the following problems: + +- No standard way of declaring configuration options increases the difficulty + for an administrator to configure Watcher: + + * The generated configuration file would miss out these parameters which will + further increase the configuration complexity. + * How to find where these parameters are without looking at the code? + +- Every plugin developer has to code the same logic declare and fetch these + options. + +Hence, Watcher should provide a way to ease the process of declaring and +fetching extra options depending on the configuration of the OpenStack cluster +or some behaviour (e.g. timeout, weights, workers, etc.) on which Watcher is +operating whilst keeping things simple from an administrator viewpoint. + +This is the reason why we should provide to the developer a standard way to +both declare and fetch configuration options so that whenever the administrator +generates the Watcher configuration sample file, it contains the configuration +options of the plugins that are currently available. + + +Use Cases +---------- + +As a developer, +I want to be able to specify a set of configuration options for my plugin +So that I can allow an administrator to adapt/tune the behaviour of my plugin +given the configuration of an OpenStack cluster. + +As an administrator, +I want to be able to access and modify the configuration options of all +available plugins +So that I can adapt/tune their behaviour the requirements of my OpenStack +cluster. + +As an administrator, +I want to be able to generate a configuration file that includes the options +provided by each available plugin +So that I can understand how to use each one of them without having to look at +the codebase. + + +Project Priority +----------------- + +Not relevant because Watcher is not in the big tent so far. + + +Proposed change +=============== + +Here below is the class diagram outlining the changes that will have to be made +in order to support the addition of configuration options: + +.. image:: ../../../doc/source/images/class_diagram_plugin_parameters.png + :width: 100% + +Moreover, all plugins are currently instantiated by the ``DefaultLoader`` when +its ``load()`` is being called. This method should be improved so it also fetch +the configuration provided by the plugin using the ``get_config_opts()`` +abstract class method that every plugin class should implement. The latter +method needs to be an class method so that when Watcher will collect the +configuration of each plugin, there will be no need to instantiate them. + +.. image:: ../../../doc/source/images/sequence_diagram_plugin_parameters_load_plugin_parameters.png + :width: 100% + +In order to expose these plugin parameters to the administrator, we also have +to auto-discover them when we use the configuration file generator which is +triggered either during the generation of the Watcher documentation or manually +with the ``tox -e config`` command: + +.. image:: ../../../doc/source/images/sequence_diagram_plugin_parameters_generate_config.png + :width: 100% + +In order to be able to achieve the process described in the above sequence +diagram, here below is a recap of the changes that will have to be made: + +- Make each plugin provide a class method named ``get_config_opts()`` that + will define all its configuration options. +- Update the ``list_opts()`` function so that it also collects the + configuration options from all the available plugins so that generating the + configuration file via the ``tox -e config`` command includes them in its + configuration sample file. + +The administrator would then have adapt this configuration sample file to +the requirements of any given OpenStack cluster. + + +Alternatives +------------ + +Instead of using a ``Loadable`` abstract class, we do it by convention. +Indeed, the main solution relies on a ``Loadable`` abstract base class that +defines the ``get_config_opts()`` method. But instead, we could use the duck +typing to say that by convention, every plugin should implement a +``get_config_opts()`` without having to enforce it codewise. +This alternative would mean less code but would also be more error-prone for +the plugin developer. + +Data model impact +----------------- + +None + +REST API impact +--------------- + +None + +Security impact +--------------- + +None + +Notifications impact +-------------------- + +None + +Other end user impact +--------------------- + +None + +Performance Impact +------------------ + +None + +Other deployer impact +--------------------- + +New configuration sections and options will be added to the Watcher +configuration file. Hence, the administrator should be aware of them. +This also mean that the documentation should be updated to encourage the plugin +developer to provide a detailed description of every single configuration +option that gets declared. + +Developer impact +---------------- + +None + + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + vincent-francoise + +Other contributors: + david-tardivel + + +Work Items +---------- + +- Implement the ``Loadable`` abstract class + + + Add an abstract class method named ``get_config_opts()`` with should return + a list of ``oslo_config.cfg.Opt`` instances. + +- Make the following classes inherit from ``Loadable`` abstract class: + + + ``BaseStrategy`` + + ``BaseAction`` + + ``BasePlanner`` + + ``BaseWorkflowFlowEngine`` + +- For each of the above, provide a default implementation of + ``get_config_opts()`` that returns an empty list which should be the default + behaviour. + +- Enhance the ``load()`` method of the ``DefaultLoader`` class to now also load + the configuration options that relates to the plugin we want to load and + inject them into the loaded plugin upon instantiating it. + + +Dependencies +============ + +* https://blueprints.launchpad.net/watcher/+spec/get-goal-from-strategy + + +Testing +======= + +* Add needed unit tests to cover the new functionality introduced by this + blueprint +* Update the broken unit tests + + +Documentation Impact +==================== + +Update all plugin implementation documentations to now mention that +configuration options can be specified via the ``get_config_opts()`` method. + + +References +========== + +None + +History +======= + +None