<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 2014&#24180;06&#26376;27&#26085; 04:57, Aline Manera
      wrote:<br>
    </div>
    <blockquote cite="mid:53AC8957.7000206@linux.vnet.ibm.com"
      type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      <div class="moz-cite-prefix">On 06/26/2014 04:35 AM, <a
          moz-do-not-send="true" class="moz-txt-link-abbreviated"
          href="mailto:lvroyce@linux.vnet.ibm.com">lvroyce@linux.vnet.ibm.com</a>
        wrote:<br>
      </div>
      <blockquote
        cite="mid:1403768132-9897-1-git-send-email-lvroyce@linux.vnet.ibm.com"
        type="cite">
        <pre wrap="">From: Royce Lv <a moz-do-not-send="true" class="moz-txt-link-rfc2396E" href="mailto:lvroyce@linux.vnet.ibm.com">&lt;lvroyce@linux.vnet.ibm.com&gt;</a>

When adding vm storage, volume and path cannot be specified
at the same time. Fix it.

Signed-off-by: Royce Lv <a moz-do-not-send="true" class="moz-txt-link-rfc2396E" href="mailto:lvroyce@linux.vnet.ibm.com">&lt;lvroyce@linux.vnet.ibm.com&gt;</a>
---
 src/kimchi/model/vmstorages.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py
index 8c51716..093b9ee 100644
--- a/src/kimchi/model/vmstorages.py
+++ b/src/kimchi/model/vmstorages.py
@@ -154,6 +154,8 @@ class VMStoragesModel(object):
         # Path will never be blank due to API.json verification.
         # There is no need to cover this case here.
         params['format'] = 'raw'
+        if 'vol' in params and 'path' in params:
+            raise InvalidParameter("KCHVMSTOR0012E")
         if params.get('vol'):
             try:
                 pool = params['pool']
</pre>
      </blockquote>
      <br>
      <font face="DejaVu Sans Mono">This is one part of the solution we
        should have for #382<br>
      </font></blockquote>
    <font face="DejaVu Sans Mono">ACK.</font><br>
    <blockquote cite="mid:53AC8957.7000206@linux.vnet.ibm.com"
      type="cite"><font face="DejaVu Sans Mono"> <br>
        if type not in ['disk', 'cdrom']:<br>
        &nbsp;&nbsp;&nbsp; raise InvalidParameter(Disk type not support)<br>
      </font></blockquote>
    <font face="DejaVu Sans Mono">This part is covered by jsonschema. </font><font
      face="DejaVu Sans Mono"><br>
      &nbsp;&nbsp;&nbsp; <br>
    </font>
    <blockquote cite="mid:53AC8957.7000206@linux.vnet.ibm.com"
      type="cite"><font face="DejaVu Sans Mono"> <br>
        path = params.get(path, None)<br>
        if type == 'cdrom':<br>
        &nbsp;&nbsp;&nbsp; if not path:<br>
        &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; raise MissingParameter()<br>
      </font></blockquote>
    <font face="DejaVu Sans Mono">I think we need to reserve volume/pool
      for cdrom type,<br>
      so that in the future, ui will be able to pick one iso from the
      iso pool. What do you think?</font><br>
    <blockquote cite="mid:53AC8957.7000206@linux.vnet.ibm.com"
      type="cite"><font face="DejaVu Sans Mono"> <br>
        &nbsp;&nbsp;&nbsp; # validate path and continue the logic<br>
        <br>
        elif type == 'disk':<br>
        &nbsp;&nbsp;&nbsp; pool = params.get(pool, None)<br>
        &nbsp;&nbsp;&nbsp; vol = params.get(vol, None)<br>
        &nbsp;&nbsp;&nbsp; if not pool or not vol:<br>
        &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; raise MissingParameter()<br>
        <br>
        &nbsp;&nbsp;&nbsp; # validate values and continue the logic<br>
      </font></blockquote>
    We have 3 issues here:<br>
    &nbsp;&nbsp;&nbsp; 1. type needs to be in 'cdrom' and 'disk' -- already covered by
    current json schema.<br>
    &nbsp;&nbsp;&nbsp; 2. For type 'disk', "pool" and "vol" need to be existed -- need
    to be covered by json schema 'dependencies' key word.<br>
    &nbsp; &nbsp; 3. For type 'cdrom', one of "path" or "pool"+"vol" needs to be
    existed, but not at the same time -- need to be covered by json
    schema 'dependencies' and "oneof" keywords. <br>
    <br>
    <font face="DejaVu Sans Mono">When I'm considering to introduce
      jsonschema "oneOf" keyword,<br>
      &nbsp;&nbsp;&nbsp;
      (<a class="moz-txt-link-freetext" href="http://json-schema.org/latest/json-schema-validation.html#anchor88">http://json-schema.org/latest/json-schema-validation.html#anchor88</a>)<br>
      jsonschema V4 support this, and this (python-jsonschema 2.3.0) is
      only available on ubuntu 14.04 and above.<br>
      Forturnately, 13.10 ends support in </font><font face="DejaVu
      Sans Mono">July 2014.<br>
      So do you think we can add this now?<br>
      REF:<br>
      &nbsp; &nbsp; <a class="moz-txt-link-freetext" href="https://launchpad.net/ubuntu/+source/python-jsonschema">https://launchpad.net/ubuntu/+source/python-jsonschema</a><br>
      &nbsp;&nbsp;&nbsp; <a class="moz-txt-link-freetext" href="https://wiki.ubuntu.com/Releases">https://wiki.ubuntu.com/Releases</a><br>
      <br>
      I will send patches using oneof and validate by python code. So
      that you can merge it before release.<br>
    </font>
    <blockquote cite="mid:53AC8957.7000206@linux.vnet.ibm.com"
      type="cite"><font face="DejaVu Sans Mono"> <br>
        <br>
        <br>
        <br>
      </font> </blockquote>
    <br>
  </body>
</html>