[Kimchi-devel] [PATCHv2 2/3] storage target: Update controller and json schema

Aline Manera alinefm at linux.vnet.ibm.com
Thu Jan 2 15:57:47 UTC 2014


On 12/30/2013 05:24 AM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> Add json schema to validate mandatory param of target_type,

Why should target_type be mandatory?

 From my perspective, the query param must be optional.
If user would like to use it, we have support, if not, try the default way

> also update controller.py.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
>   src/kimchi/API.json      | 11 +++++++++++
>   src/kimchi/controller.py | 30 ++++++++++++++++++++++++++++--
>   2 files changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/src/kimchi/API.json b/src/kimchi/API.json
> index 29d8172..24ff6eb 100644
> --- a/src/kimchi/API.json
> +++ b/src/kimchi/API.json
> @@ -216,6 +216,17 @@
>                       "required": true
>                   }
>               }
> +        },
> +        "storagetargets_get_list": {
> +            "type": "object",
> +            "properties": {
> +                "target_type": {
> +                    "description": "List storage servers of given type",
> +                    "type": "string",
> +                    "pattern": "^netfs$",
> +                    "required": true
> +                }
> +            }
>           }
>       }
>   }
> diff --git a/src/kimchi/controller.py b/src/kimchi/controller.py
> index bdd3cab..bd94fd4 100644
> --- a/src/kimchi/controller.py
> +++ b/src/kimchi/controller.py
> @@ -660,9 +660,35 @@ class StorageServers(Collection):
>           res_list = get_list(*self.model_args, **params)
>           return kimchi.template.render(get_class_name(self), res_list)
>
> -
>   class StorageServer(Resource):
> -    pass
> +    def __init__(self, model, ident):
> +        super(StorageServer, self).__init__(model, ident)
> +
> +    @property
> +    def data(self):
> +        return dict(name=self.ident)
> +
> +    def _cp_dispatch(self, vpath):
> +        if vpath:
> +            subcollection = vpath.pop(0)
> +            if subcollection == 'storagetargets':
> +                # incoming text, from URL, is not unicode, need decode
> +                return StorageTargets(self.model, self.ident.decode("utf-8"))
> +
> +class StorageTargets(Collection):
> +    def __init__(self, model, server):
> +        super(StorageTargets, self).__init__(model)
> +        self.server = server
> +        self.resource_args = [self.server, ]
> +        self.model_args = [self.server, ]
> +
> +    def get(self):
> +        res_list = []
> +        params = parse_request()
> +        validate_params(params, self, 'get_list')
> +        get_list = getattr(self.model, model_fn(self, 'get_list'))
> +        res_list = get_list(*self.model_args, **params)
> +        return kimchi.template.render(get_class_name(self), res_list)

Why do we need a new collection to expose the sources paths?

GET /storageserver/<id> should return all data related to this server


>   class Config(Resource):
>       def __init__(self, model, id=None):




More information about the Kimchi-devel mailing list