diff --git a/specs/10.0/fuel-devops-client-as-a-module.rst b/specs/10.0/fuel-devops-client-as-a-module.rst new file mode 100644 index 00000000..f4622643 --- /dev/null +++ b/specs/10.0/fuel-devops-client-as-a-module.rst @@ -0,0 +1,261 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + +========================================= +Create a client module for fuel-devops3.0 +========================================= + +https://blueprints.launchpad.net/fuel/+spec/fuel-devops-client-as-a-module + +Fuel-devops should have an API class to provide a complete interface for +interacting with the environment. + + +-------------------- +Problem description +-------------------- + +In current implementation there is a list of functions to interact +with environments: + + * devops/helpers/helpers.py: + * get_nodes + * get_slave_ip + * get_admin_ip + * get_node_remote + * get_admin_remote + * get_private_keys + * devops/helpers/ntp.py: + * sync_time + +These main functions are written in procedural style. It makes it hard to +extend or add a new one. + +Also some of these functions are duplicated in fuel-qa +fuelweb_test/models/environment.py + +---------------- +Proposed changes +---------------- + +To reduce dependency issues and allow to re-use management layer of +virtual/baremetal labs: + +- separate all the code that manage environments nodes/networks + into a 'devops' module +- separate all the code that provide a logical layer (ssh manager, + filters for specific node roles, accessing to the services + that are started on the environment nodes) into a fuel-devops client module. + +Fuel-devops client module should provide a complete interface for interacting +with the environment: manage nodes, mapping devops and nailgun nodes into a +single object, accessing nodes via SSH, snapshot/revert nodes, bootstrap admin +node and so on. +It should encapsulate some of methods from fuel-devops Environment object and +fuel-qa EnvironmentModel object (then deprecate it later). + + +Schema of DevopsClient usage:: + + +---------+ +----------+ + | | | | + | fuel-qa | | shell.py | + | | | | + +-----+---+ +-----+----+ + | | + +--------+ +------------+ + | | + v v + +--------------+ + | | + | DevopsClient | + | | + +----+-----+---+ + | | + | +----------+------------------+ + | | | + v v v + +--------------------+ +---------------+ +----------+ + | | | | | | + | devops.Environment | | NailgunClient | | NtpGroup | + | | | | | | + +--------------------+ +---------------+ +----------+ + + +NailgunClient should be added to replace get_nodes method. +NtpGroup should be added to replace sync_time method. + + + +Web UI +====== + +None + +Nailgun +======= + +None + +Data model +---------- + +None + +REST API +-------- + +No FUEL REST API changes. + +Orchestration +============= + +None + +RPC Protocol +------------ + +None + +Fuel Client +=========== + +None + +Plugins +======= + +None + +Fuel Library +============ + +None + +------------ +Alternatives +------------ + +N/A + + +-------------- +Upgrade impact +-------------- + +N/A + + +--------------- +Security impact +--------------- + +N/A + + +-------------------- +Notifications impact +-------------------- + +N/A + + +--------------- +End user impact +--------------- + +N/A + + +------------------ +Performance impact +------------------ + +N/A + + +----------------- +Deployment impact +----------------- + +N/A + + +---------------- +Developer impact +---------------- + +N/A + + +--------------------- +Infrastructure impact +--------------------- + +N/A + + +-------------------- +Documentation impact +-------------------- + +* fuel-qa + +* fuel-devops + + +-------------- +Implementation +-------------- + +Assignee(s) +=========== + +Primary assignee: + * Anton Studenov (astudenov): astudenov@mirantis.com + +Other contributors: + * Dennis Dmitriev (ddmitriev): ddmitriev@mirantis.com + +Mandatory design review: + Anastasiia Urlapova, Denys Dmytriiev + + +Work Items +========== + +* Implement DevopsClient and move get_admin_ip/get_node_remote/etc + to this class +* Change Shell to use DevopsClient instead of direct access to + Environment +* Refactor ntp.py to be independent of get_admin/get_slave_remote functions +* Deprecate get_admin_ip/get_node_remote/etc functions + + +Dependencies +============ + +None + + +------------ +Testing, QA +------------ + +None + +Acceptance criteria +=================== + +DevopsClient provides all necessary methods to interact with devops +environment. + + +---------- +References +---------- + +None