[openstack-dev] [fuel][client] new client implementation ideas
Igor Kalnitsky
ikalnitsky at mirantis.com
Wed Jan 14 09:58:09 UTC 2015
Hi, Konstantin,
Thank you for sharing ideas. Your "yet-one-more implementation of
fuel-client" one more time confirms that currently we have completely
unusable implementation.
Just for your information: we have plans for python-fuelclient
refactoring [1]. The main point of this blueprint is to provide
fuelclient which will be useful as both: library and cli. Please, do
not hesitate share your ideas in blueprint or in the working ehterpad
[2].
- Igor
[1]: https://review.openstack.org/#/c/135915/
[2]: https://etherpad.openstack.org/p/fuelclient-redesign
On Wed, Jan 14, 2015 at 12:38 PM, Konstantin Danilov
<kdanilov at mirantis.com> wrote:
> Hi all,
>
> We are working on fuel certification script
> https://github.com/stgleb/fuel-web
> and have yet-one-more implementation of fuel-client, which cover very small
> of Fuel API, yet we have some ideas, which you might be interesting in.
>
> 1) high-level primitives for REST operations.
>
> a) GET/PUT/POST/etc function, which returns closure, bonded to url and
> method
>
>
> class Cluster(RestObj):
> """Class represents Cluster in Fuel"""
>
> add_node_call = PUT('api/nodes')
> start_deploy = PUT('api/clusters/{id}/changes')
> get_status = GET('api/clusters/{id}')
> delete = DELETE('api/clusters/{id}')
>
> GET(url_template) returns function/class method, which accepts set
> of parameters,
> format part of them into url_template to obtain final url and pass
> other parameters
> as data in http request. E.g.
>
> get_some_objs = GET('some/objects/{cluster_id}/really_get')
>
>
> get_some_objs(cluster_id=12, kind="db objects") will result in
> HTTP request GET '..../some/objects/12/really_get' data =
> {'kind':'db objects'}
>
> in case of class method it also extracts missing format parameters
> from self.__dict__.
> E.g.
>
> node = Node.get_all()[0]
> nnode = node.get() <<< takes id from node.id
>
>
> b) Auto generate API for strict restfull cases, e.g.
>
> class Node(RestfulObj):
> """Represents node in Fuel"""
>
> __url__ = '/api/nodes/{id}'
>
> ==
>
> class Node(RestObj):
> """Represents node in Fuel"""
>
> get_all = GET('/api/nodes')
> get = GET('/api/nodes/{id}')
> delete = DELETE('/api/nodes/{id}')
> create = POST('/api/nodes/{id}')
> ....
>
> 2) API for create cluster from yaml description. Allow to deploy whole
> openstack cluster from single yaml file. We being asking a lot whenever this
> call would be available in fuel client
> by different team/persons.
>
> https://github.com/stgleb/fuel-web/blob/sertification-script/certification_script/certification_script/cert_script.py#L165
>
> 3) I have a semi-implemented ideas for future-based API for background tasks
> (e.g. cluster deployment)
>
> Code is available in repo and we would be glad to help you to merge it to
> new fuel-client
>
> --
> Kostiantyn Danilov aka koder.ua
> Principal software engineer, Mirantis
>
> skype:koder.ua
> http://koder-ua.blogspot.com/
> http://mirantis.com
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
More information about the OpenStack-dev
mailing list