[Kimchi-devel] [PATCH] Disable static path checking by cherrypy

Christy Perez christy at linux.vnet.ibm.com
Fri Jan 23 14:34:43 UTC 2015



On 01/23/2015 06:50 AM, Aline Manera wrote:
> 
> On 22/01/2015 21:51, Christy Perez wrote:
>>
>> On 01/22/2015 10:41 AM, Aline Manera wrote:
>>> On 21/01/2015 17:51, Christy Perez wrote:
>>>> CherryPy has a checker module that runs certain tests for resources.
>>>> One such test is for static paths, in which is tests all resources
>>>> using a non-existent html file. Since Kimchi is not a static web app,
>>>> this check can be safely disregarded.
>>> Kimchi servers some static files and directories in its configuration.
>>> So I am not sure it is a good solution.
>>>
>>>> The motivation behind this change is the following scenario:
>>>>
>>>> The need to treat a certain flavor of a resource differently takes
>>>> advantage of the base model passed to the control's init function.
>>>> When calling the base model function to retreive the desired property,
>>>> an exception is thrown because the underlying resource doesn't exist.
>>>>
>>>> This brings to light that any use of the base model from the init
>>>> of any control object will result in the same checker issue.
>>>>
>>>> To easily test this issue:
>>>> - Add the following line to the __init__ function in control/vms.py:
>>>>       model.vm_lookup(self.ident.decode('utf-8'))
>>>> - Run the rest tests: $ sudo ./run_tests.sh test_rest.RestTests
>>> To solve it we could add a new parameter "destroyable" to
>>> generate_action_handler()
>> What would qualify something as destroyable?
> 
> A "destroyable" function will be that one which deletes a resource if it
> is non-persistent.
> 
> Like, vm.poweroff(), vm.shutoff(), network.deactivate(), etc

So, this is completely decoupled from the non-persistent issue. I'd like
to find a way to fix this for any object that might hit it. It doesn't
happen because a resource isn't persistent, either.

> 
>>   If you mean a
>> non-persistent object ... that's more narrow of a scope than the problem
>> I was trying to solve with this.
>>
>>> _generate_action_handler_base() already calls lookup() so we can check
>>> the return data
>>>
>>> data = self.lookup()
>>>
>>> If not destroyable and 'persistent' in data.keys() and
>>> data['persistent']:
>>>      raise NotFoundError()
>>>
>>>> See: cherrypy._cpchecker
>>>>
>>>> Signed-off-by: Christy Perez <christy at linux.vnet.ibm.com>
>>>> ---
>>>>    src/kimchi/config.py.in | 6 +++---
>>>>    1 file changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in
>>>> index 83a5dd0..86ca862 100644
>>>> --- a/src/kimchi/config.py.in
>>>> +++ b/src/kimchi/config.py.in
>>>> @@ -23,10 +23,9 @@ import os
>>>>    import platform
>>>>    import threading
>>>>
>>>> -
>>>> +from cherrypy import checker
>>>>    from ConfigParser import SafeConfigParser
>>>>
>>>> -
>>>>    from kimchi.xmlutils.utils import xpath_get_text
>>>>
>>>>    __version__ = "@kimchiversion@"
>>>> @@ -40,7 +39,6 @@ kimchiLock = threading.Lock()
>>>>    # Storage pool constant for read-only pool types
>>>>    READONLY_POOL_TYPE = ['iscsi', 'scsi', 'mpath']
>>>>
>>>> -
>>>>    def get_object_store():
>>>>        return os.path.join(paths.state_dir, 'objectstore')
>>>>
>>>> @@ -182,6 +180,8 @@ class UIConfig(dict):
>>>>    class KimchiConfig(dict):
>>>>        # session time out is 10 minutes
>>>>        SESSIONSTIMEOUT = 10
>>>> +    global checker
>>>> +    checker.check_static_paths = False
>>>>
>>>>        kimchi_config = {
>>>>            '/': {
> 




More information about the Kimchi-devel mailing list