3.8 KiB
Refactoring for fuelclient
https://blueprints.launchpad.net/fuel/+spec/refactoring-for-fuelclient
We need to perform refactoring for fuelclient for improving reusability for its code base and gain more control for both whole system and particular parts of it.
Problem description
Now there are several issues in architecture of the project which cause difficulties in maintaining, implementing new logic and reusing existing code. These parts are:
- APIclient code for maintaining http communication with nailgun server; now slightly obsolete python module urllib2 is using so code for request operations is pretty excessive
- Formatter for console output; own written invention so it is hard to dive into, also not flexible for future changes
- Objects hierarchy; is overwhelming with many interconnections between objects, may be simplified
- Tests coverage; now only limited set of tests that check simple use cases is present, so it must be extended and if possible whole testing system should be rewritten to meet OS best practices in cli testing.
Proposed change
There are several proposes for every problem mentioned in previous section:
- substitute urllib2 with requests module, this will leads to more simplified code in APIclient
- include cliff framework for cli and formatter part of the system
- perform minor refactoring when it needed.
Alternatives
All other basic tools such argparse or docopt doesn't suffice in case of fuelclient because we need to implement our own object hierarchy instead of using base classes of framework which leads to complicated structure as that we have now. There also others framework for building cli application (e.g. http://click.pocoo.org/) but chosen tools are wide using in OS community and are best practices for building OS related application.
Data model impact
None
REST API impact
None
Upgrade impact
Refactoring requires some additional packages to be installed on master node so they should be present after upgrade to version which includes change upon the table.
Security impact
None
Notifications impact
None
Other end user impact
End users workflow may be affected as interface of system will be changed so adequate documentation must be provided for them
Performance Impact
None
Other deployer impact
One should add needed rpm's to fuelclient spec. Packages must be already present in repos.
Developer impact
After refactoring particular parts of the system may be reused in other projects when such functionality is needed as ostf, system tests etc. Also using cliff simplifying addition of new cli actions trough mechanism of entry points for package.
Implementation
Assignee(s)
- Primary assignee:
-
aroma-x
Work Items
Whole task may be divide into following separate changes:
- plugging requests
- plugging cliff
Dependencies
Refactoring relies on additional package - python-cliff
Testing
As purpose of the refactoring is to bring well recommended itself in OS community technologies and tools it is naturally that testing system must be changed too in order to use best practices from corresponding OS development area, i.e. testing of cli clients. Also current coverage of use cases must be extended as it is not enough for such big project as nailgun.
Documentation Impact
Interface of fuelclient may be changed after refactoring so it must be mirrored into corresponding documentation
References
Cliff documentation: http://cliff.readthedocs.org/en/latest/
Requests documentation: http://docs.python-requests.org/en/latest/