[PATCH] Fix cdrom eject

From: Royce Lv <lvroyce@linux.vnet.ibm.com> Cdrom eject intended to use POST "/vms/vm-name/vmstorages/hdc" to eject cdrom, while UI used PUT "/vms/vm-name/vmstorages/hdc" to implement this, which makes cdrom eject not working. Adjust backend code to fix this and delete eject action. Signed-off-by: Royce Lv <lvroyce@linux.vnet.ibm.com> --- docs/API.md | 2 -- src/kimchi/API.json | 2 +- src/kimchi/control/vm/storages.py | 1 - src/kimchi/model/vmstorages.py | 8 +++----- tests/test_model.py | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/docs/API.md b/docs/API.md index ca64af6..50ed321 100644 --- a/docs/API.md +++ b/docs/API.md @@ -168,8 +168,6 @@ Represents a snapshot of the Virtual Machine's primary monitor. **Actions (POST):** -* eject: Eject cdrom from device. - ### Collection: Templates diff --git a/src/kimchi/API.json b/src/kimchi/API.json index 2e2f9b0..47bc05b 100644 --- a/src/kimchi/API.json +++ b/src/kimchi/API.json @@ -522,7 +522,7 @@ "path": { "description": "Path of iso image file or disk mount point", "type": "string", - "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", + "pattern": "^(|(/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", "required": true, "error": "KCHVMSTOR0003E" } diff --git a/src/kimchi/control/vm/storages.py b/src/kimchi/control/vm/storages.py index a8a037a..984c4d2 100644 --- a/src/kimchi/control/vm/storages.py +++ b/src/kimchi/control/vm/storages.py @@ -39,7 +39,6 @@ class VMStorage(Resource): self.info = {} self.model_args = [self.vm, self.ident] self.uri_fmt = '/vms/%s/storages/%s' - self.eject = self.generate_action_handler('eject') self.update_params = ['path'] @property diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py index 40856d3..54e2685 100644 --- a/src/kimchi/model/vmstorages.py +++ b/src/kimchi/model/vmstorages.py @@ -232,8 +232,9 @@ class VMStorageModel(object): raise OperationFailed("KCHVMSTOR0010E", {'error': e.message}) def update(self, vm_name, dev_name, params): - if params.get('path'): - params['src_type'] = _check_path(params['path']) + path = params.get('path') + if path and len(path) != 0: + params['src_type'] = _check_path(path) ignore_source = False else: params['src_type'] = 'file' @@ -251,6 +252,3 @@ class VMStorageModel(object): except Exception as e: raise OperationFailed("KCHVMSTOR0009E", {'error': e.message}) return dev_name - - def eject(self, vm_name, dev_name): - return self.update(vm_name, dev_name, dict()) diff --git a/tests/test_model.py b/tests/test_model.py index 5ee824d..27f5b80 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -382,7 +382,7 @@ class ModelTests(unittest.TestCase): self.assertEquals(iso_path, cdrom_info['path']) # eject cdrom - cdrom_dev = inst.vmstorage_eject(vm_name, cdrom_dev) + cdrom_dev = inst.vmstorage_update(vm_name, cdrom_dev, {'path': ''}) cdrom_info = inst.vmstorage_lookup(vm_name, cdrom_dev) self.assertEquals('', cdrom_info['path']) inst.vm_poweroff(vm_name) -- 1.8.3.2

Hi, I have applied this to the latest kimchi code and encountered an error. Would you please take a look into that? Thanks On 9/15/2014 5:02 PM, lvroyce@linux.vnet.ibm.com wrote:
From: Royce Lv <lvroyce@linux.vnet.ibm.com>
Cdrom eject intended to use POST "/vms/vm-name/vmstorages/hdc" to eject cdrom, while UI used PUT "/vms/vm-name/vmstorages/hdc" to implement this, which makes cdrom eject not working. Adjust backend code to fix this and delete eject action.
Signed-off-by: Royce Lv <lvroyce@linux.vnet.ibm.com> --- docs/API.md | 2 -- src/kimchi/API.json | 2 +- src/kimchi/control/vm/storages.py | 1 - src/kimchi/model/vmstorages.py | 8 +++----- tests/test_model.py | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/docs/API.md b/docs/API.md index ca64af6..50ed321 100644 --- a/docs/API.md +++ b/docs/API.md @@ -168,8 +168,6 @@ Represents a snapshot of the Virtual Machine's primary monitor.
**Actions (POST):**
-* eject: Eject cdrom from device. -
### Collection: Templates
diff --git a/src/kimchi/API.json b/src/kimchi/API.json index 2e2f9b0..47bc05b 100644 --- a/src/kimchi/API.json +++ b/src/kimchi/API.json @@ -522,7 +522,7 @@ "path": { "description": "Path of iso image file or disk mount point", "type": "string", - "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", + "pattern": "^(|(/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", "required": true, "error": "KCHVMSTOR0003E" } diff --git a/src/kimchi/control/vm/storages.py b/src/kimchi/control/vm/storages.py index a8a037a..984c4d2 100644 --- a/src/kimchi/control/vm/storages.py +++ b/src/kimchi/control/vm/storages.py @@ -39,7 +39,6 @@ class VMStorage(Resource): self.info = {} self.model_args = [self.vm, self.ident] self.uri_fmt = '/vms/%s/storages/%s' - self.eject = self.generate_action_handler('eject') self.update_params = ['path']
@property diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py index 40856d3..54e2685 100644 --- a/src/kimchi/model/vmstorages.py +++ b/src/kimchi/model/vmstorages.py @@ -232,8 +232,9 @@ class VMStorageModel(object): raise OperationFailed("KCHVMSTOR0010E", {'error': e.message})
def update(self, vm_name, dev_name, params): - if params.get('path'): - params['src_type'] = _check_path(params['path']) + path = params.get('path') + if path and len(path) != 0: + params['src_type'] = _check_path(path) ignore_source = False else: params['src_type'] = 'file' @@ -251,6 +252,3 @@ class VMStorageModel(object): except Exception as e: raise OperationFailed("KCHVMSTOR0009E", {'error': e.message}) return dev_name - - def eject(self, vm_name, dev_name): - return self.update(vm_name, dev_name, dict()) diff --git a/tests/test_model.py b/tests/test_model.py index 5ee824d..27f5b80 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -382,7 +382,7 @@ class ModelTests(unittest.TestCase): self.assertEquals(iso_path, cdrom_info['path'])
# eject cdrom - cdrom_dev = inst.vmstorage_eject(vm_name, cdrom_dev) + cdrom_dev = inst.vmstorage_update(vm_name, cdrom_dev, {'path': ''}) cdrom_info = inst.vmstorage_lookup(vm_name, cdrom_dev) self.assertEquals('', cdrom_info['path']) inst.vm_poweroff(vm_name)

Hi, I have applied this to the latest kimchi code and encountered an error.
Would you please take a look into that? Thanks Maybe you haven't restarted kimchid so API.json have not taken effect,
On 2014年09月16日 17:16, Wen Wang wrote: try restarting it.
On 9/15/2014 5:02 PM, lvroyce@linux.vnet.ibm.com wrote:
From: Royce Lv <lvroyce@linux.vnet.ibm.com>
Cdrom eject intended to use POST "/vms/vm-name/vmstorages/hdc" to eject cdrom, while UI used PUT "/vms/vm-name/vmstorages/hdc" to implement this, which makes cdrom eject not working. Adjust backend code to fix this and delete eject action.
Signed-off-by: Royce Lv <lvroyce@linux.vnet.ibm.com> --- docs/API.md | 2 -- src/kimchi/API.json | 2 +- src/kimchi/control/vm/storages.py | 1 - src/kimchi/model/vmstorages.py | 8 +++----- tests/test_model.py | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/docs/API.md b/docs/API.md index ca64af6..50ed321 100644 --- a/docs/API.md +++ b/docs/API.md @@ -168,8 +168,6 @@ Represents a snapshot of the Virtual Machine's primary monitor.
**Actions (POST):**
-* eject: Eject cdrom from device. -
### Collection: Templates
diff --git a/src/kimchi/API.json b/src/kimchi/API.json index 2e2f9b0..47bc05b 100644 --- a/src/kimchi/API.json +++ b/src/kimchi/API.json @@ -522,7 +522,7 @@ "path": { "description": "Path of iso image file or disk mount point", "type": "string", - "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", + "pattern": "^(|(/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", "required": true, "error": "KCHVMSTOR0003E" } diff --git a/src/kimchi/control/vm/storages.py b/src/kimchi/control/vm/storages.py index a8a037a..984c4d2 100644 --- a/src/kimchi/control/vm/storages.py +++ b/src/kimchi/control/vm/storages.py @@ -39,7 +39,6 @@ class VMStorage(Resource): self.info = {} self.model_args = [self.vm, self.ident] self.uri_fmt = '/vms/%s/storages/%s' - self.eject = self.generate_action_handler('eject') self.update_params = ['path']
@property diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py index 40856d3..54e2685 100644 --- a/src/kimchi/model/vmstorages.py +++ b/src/kimchi/model/vmstorages.py @@ -232,8 +232,9 @@ class VMStorageModel(object): raise OperationFailed("KCHVMSTOR0010E", {'error': e.message})
def update(self, vm_name, dev_name, params): - if params.get('path'): - params['src_type'] = _check_path(params['path']) + path = params.get('path') + if path and len(path) != 0: + params['src_type'] = _check_path(path) ignore_source = False else: params['src_type'] = 'file' @@ -251,6 +252,3 @@ class VMStorageModel(object): except Exception as e: raise OperationFailed("KCHVMSTOR0009E", {'error': e.message}) return dev_name - - def eject(self, vm_name, dev_name): - return self.update(vm_name, dev_name, dict()) diff --git a/tests/test_model.py b/tests/test_model.py index 5ee824d..27f5b80 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -382,7 +382,7 @@ class ModelTests(unittest.TestCase): self.assertEquals(iso_path, cdrom_info['path'])
# eject cdrom - cdrom_dev = inst.vmstorage_eject(vm_name, cdrom_dev) + cdrom_dev = inst.vmstorage_update(vm_name, cdrom_dev, {'path': ''}) cdrom_info = inst.vmstorage_lookup(vm_name, cdrom_dev) self.assertEquals('', cdrom_info['path']) inst.vm_poweroff(vm_name)

Tested-by: Wen Wang<wenwang@linux.vnet.ibm.com> On 9/15/2014 5:02 PM, lvroyce@linux.vnet.ibm.com wrote:
From: Royce Lv <lvroyce@linux.vnet.ibm.com>
Cdrom eject intended to use POST "/vms/vm-name/vmstorages/hdc" to eject cdrom, while UI used PUT "/vms/vm-name/vmstorages/hdc" to implement this, which makes cdrom eject not working. Adjust backend code to fix this and delete eject action.
Signed-off-by: Royce Lv <lvroyce@linux.vnet.ibm.com> --- docs/API.md | 2 -- src/kimchi/API.json | 2 +- src/kimchi/control/vm/storages.py | 1 - src/kimchi/model/vmstorages.py | 8 +++----- tests/test_model.py | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/docs/API.md b/docs/API.md index ca64af6..50ed321 100644 --- a/docs/API.md +++ b/docs/API.md @@ -168,8 +168,6 @@ Represents a snapshot of the Virtual Machine's primary monitor.
**Actions (POST):**
-* eject: Eject cdrom from device. -
### Collection: Templates
diff --git a/src/kimchi/API.json b/src/kimchi/API.json index 2e2f9b0..47bc05b 100644 --- a/src/kimchi/API.json +++ b/src/kimchi/API.json @@ -522,7 +522,7 @@ "path": { "description": "Path of iso image file or disk mount point", "type": "string", - "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", + "pattern": "^(|(/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", "required": true, "error": "KCHVMSTOR0003E" } diff --git a/src/kimchi/control/vm/storages.py b/src/kimchi/control/vm/storages.py index a8a037a..984c4d2 100644 --- a/src/kimchi/control/vm/storages.py +++ b/src/kimchi/control/vm/storages.py @@ -39,7 +39,6 @@ class VMStorage(Resource): self.info = {} self.model_args = [self.vm, self.ident] self.uri_fmt = '/vms/%s/storages/%s' - self.eject = self.generate_action_handler('eject') self.update_params = ['path']
@property diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py index 40856d3..54e2685 100644 --- a/src/kimchi/model/vmstorages.py +++ b/src/kimchi/model/vmstorages.py @@ -232,8 +232,9 @@ class VMStorageModel(object): raise OperationFailed("KCHVMSTOR0010E", {'error': e.message})
def update(self, vm_name, dev_name, params): - if params.get('path'): - params['src_type'] = _check_path(params['path']) + path = params.get('path') + if path and len(path) != 0: + params['src_type'] = _check_path(path) ignore_source = False else: params['src_type'] = 'file' @@ -251,6 +252,3 @@ class VMStorageModel(object): except Exception as e: raise OperationFailed("KCHVMSTOR0009E", {'error': e.message}) return dev_name - - def eject(self, vm_name, dev_name): - return self.update(vm_name, dev_name, dict()) diff --git a/tests/test_model.py b/tests/test_model.py index 5ee824d..27f5b80 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -382,7 +382,7 @@ class ModelTests(unittest.TestCase): self.assertEquals(iso_path, cdrom_info['path'])
# eject cdrom - cdrom_dev = inst.vmstorage_eject(vm_name, cdrom_dev) + cdrom_dev = inst.vmstorage_update(vm_name, cdrom_dev, {'path': ''}) cdrom_info = inst.vmstorage_lookup(vm_name, cdrom_dev) self.assertEquals('', cdrom_info['path']) inst.vm_poweroff(vm_name)

-- Tested-by: Paulo Vital <pvital@linux.vnet.ibm.com> Reviewed-by: Paulo Vital <pvital@linux.vnet.ibm.com> On Mon, 2014-09-15 at 17:02 +0800, lvroyce@linux.vnet.ibm.com wrote:
From: Royce Lv <lvroyce@linux.vnet.ibm.com>
Cdrom eject intended to use POST "/vms/vm-name/vmstorages/hdc" to eject cdrom, while UI used PUT "/vms/vm-name/vmstorages/hdc" to implement this, which makes cdrom eject not working. Adjust backend code to fix this and delete eject action.
Signed-off-by: Royce Lv <lvroyce@linux.vnet.ibm.com> --- docs/API.md | 2 -- src/kimchi/API.json | 2 +- src/kimchi/control/vm/storages.py | 1 - src/kimchi/model/vmstorages.py | 8 +++----- tests/test_model.py | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/docs/API.md b/docs/API.md index ca64af6..50ed321 100644 --- a/docs/API.md +++ b/docs/API.md @@ -168,8 +168,6 @@ Represents a snapshot of the Virtual Machine's primary monitor.
**Actions (POST):**
-* eject: Eject cdrom from device. -
### Collection: Templates
diff --git a/src/kimchi/API.json b/src/kimchi/API.json index 2e2f9b0..47bc05b 100644 --- a/src/kimchi/API.json +++ b/src/kimchi/API.json @@ -522,7 +522,7 @@ "path": { "description": "Path of iso image file or disk mount point", "type": "string", - "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", + "pattern": "^(|(/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*$", "required": true, "error": "KCHVMSTOR0003E" } diff --git a/src/kimchi/control/vm/storages.py b/src/kimchi/control/vm/storages.py index a8a037a..984c4d2 100644 --- a/src/kimchi/control/vm/storages.py +++ b/src/kimchi/control/vm/storages.py @@ -39,7 +39,6 @@ class VMStorage(Resource): self.info = {} self.model_args = [self.vm, self.ident] self.uri_fmt = '/vms/%s/storages/%s' - self.eject = self.generate_action_handler('eject') self.update_params = ['path']
@property diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py index 40856d3..54e2685 100644 --- a/src/kimchi/model/vmstorages.py +++ b/src/kimchi/model/vmstorages.py @@ -232,8 +232,9 @@ class VMStorageModel(object): raise OperationFailed("KCHVMSTOR0010E", {'error': e.message})
def update(self, vm_name, dev_name, params): - if params.get('path'): - params['src_type'] = _check_path(params['path']) + path = params.get('path') + if path and len(path) != 0: + params['src_type'] = _check_path(path) ignore_source = False else: params['src_type'] = 'file' @@ -251,6 +252,3 @@ class VMStorageModel(object): except Exception as e: raise OperationFailed("KCHVMSTOR0009E", {'error': e.message}) return dev_name - - def eject(self, vm_name, dev_name): - return self.update(vm_name, dev_name, dict()) diff --git a/tests/test_model.py b/tests/test_model.py index 5ee824d..27f5b80 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -382,7 +382,7 @@ class ModelTests(unittest.TestCase): self.assertEquals(iso_path, cdrom_info['path'])
# eject cdrom - cdrom_dev = inst.vmstorage_eject(vm_name, cdrom_dev) + cdrom_dev = inst.vmstorage_update(vm_name, cdrom_dev, {'path': ''}) cdrom_info = inst.vmstorage_lookup(vm_name, cdrom_dev) self.assertEquals('', cdrom_info['path']) inst.vm_poweroff(vm_name)
participants (5)
-
Aline Manera
-
lvroyce@linux.vnet.ibm.com
-
Paulo Ricardo Paz Vital
-
Royce Lv
-
Wen Wang