[Kimchi-devel] [PATCHv3 2/3] UI: Support add guest disk

Hongliang Wang hlwang at linux.vnet.ibm.com
Tue Apr 29 07:11:38 UTC 2014


On 04/29/2014 02:53 PM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> Extend current cdrom disk add to cdrom disk attachment.
> Also add 'bus' for user to choose from.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
>   ui/css/theme-default/guest-storage-add.css |  16 ++++
>   ui/js/src/kimchi.guest_storage_add.main.js | 114 +++++++++++++++++++++++++++--
>   ui/pages/guest-storage-add.html.tmpl       |  62 ++++++++++++++--
>   3 files changed, 179 insertions(+), 13 deletions(-)
>
> diff --git a/ui/css/theme-default/guest-storage-add.css b/ui/css/theme-default/guest-storage-add.css
> index 4da8389..e0be9c0 100644
> --- a/ui/css/theme-default/guest-storage-add.css
> +++ b/ui/css/theme-default/guest-storage-add.css
> @@ -52,6 +52,22 @@
>       cursor: not-allowed;
>   }
>
> +.guest-storage-add-wrapper-label, .guest-storage-add-wrapper-controls {
> +    display: inline-block;
> +}
> +
> +.guest-storage-add-wrapper-label {
> +    height: 38px;
> +    line-height: 38px;
> +    margin-top: 5px;
> +    vertical-align: top;
> +    width: 80px;
> +}
> +
> +.guest-storage-add-wrapper-controls {
> +    width: 470px;
> +}
> +
>   #vm-storage-button-add[disabled] {
>       background: #c0c0c0;
>       color: #ddd;
> diff --git a/ui/js/src/kimchi.guest_storage_add.main.js b/ui/js/src/kimchi.guest_storage_add.main.js
> index 9e232d7..ac514d2 100644
> --- a/ui/js/src/kimchi.guest_storage_add.main.js
> +++ b/ui/js/src/kimchi.guest_storage_add.main.js
> @@ -18,25 +18,127 @@
>   kimchi.guest_storage_add_main = function() {
>       var types = [{
>           label: 'cdrom',
> -        value: 'cdrom'
> +        value: 'cdrom',
> +        bus: ['ide']
> +    },
> +    {
> +        label: 'disk',
> +        value: 'disk',
> +        bus: ['virtio', 'ide']
>       }];
>       kimchi.select('guest-storage-type-list', types);
> +    kimchi.select('guest-storage-bus-list', [{label: 'ide', value: 'ide'}]);
>
>       var storageAddForm = $('#form-guest-storage-add');
>       var submitButton = $('#guest-storage-button-add');
>       var nameTextbox = $('input[name="dev"]', storageAddForm);
>       var typeTextbox = $('input[name="type"]', storageAddForm);
> +    var busTextbox = $('input[name="bus"]', storageAddForm);
>       var pathTextbox = $('input[name="path"]', storageAddForm);
> +    var poolTextbox = $('input[name="storagepool"]', storageAddForm);
> +    var volTextbox = $('input[name="storagevol"]', storageAddForm);
> +
> +    typeTextbox.change(function() {
> +        $('#guest-storage-bus').selectMenu();
> +        var pathObject = {'cdrom': ".path-section", 'disk': '.volume-section'}
> +        var selectType = $(this).val();
> +        $.each(pathObject, function(type, value) {
> +            if(selectType == type){
> +                $(value).removeClass('hidden');
> +            } else {
> +                $(value).addClass('hidden');
> +            }
> +        });
> +
> +        $.each(types, function(index, elem){
> +            if (selectType == elem.value) {
> +                var buses = new Array();
> +                $.each(elem.bus, function (index, elem) {
> +                    buses[index] = {label: elem, value: elem};
> +                });
> +                $('#guest-storage-bus').selectMenu("setData", buses);
> +                $('#guest-storage-bus-label').text(buses[0].value);
> +                $('#guest-storage-bus-type').val(buses[0].value);
> +            }
> +        });
> +    });
> +
> +    kimchi.listStoragePools(function(result) {
> +        var options = [];
> +        if (result && result.length) {
> +            $.each(result, function(index, storagePool) {
> +                if ((storagePool.state=="active") && (storagePool.type !== 'kimchi-iso')) {
> +                    options.push({
> +                        label: storagePool.name,
> +                        value: storagePool.name
> +                        });
> +                    }
> +                });

> +                $(poolTextbox).val('default');
> +                $(poolTextbox).change();
Hard-coded?
> +                kimchi.select('guest-add-storage-pool-list', options);
> +        }
> +    });
> +
> +    poolTextbox.change(function() {
> +        var options = [];
> +        kimchi.listStorageVolumes($(this).val(), function(result) {
> +            $('#guest-disk').selectMenu();
> +            if (result.length) {
> +                $.each(result, function(index, value) {
> +                    // Only unused volume can be attached
> +                    if (value.ref_cnt == 0) {
> +                        options.push({
> +                            label: value.name,
> +                            value: value.path
> +                          });
> +                    }
> +                });

> +                $(volTextbox).val(options[0].value);
> +                $(volTextbox).change();
The array options may be empty. Check it.
if(options.length) {
   // ...
}
> +            }
> +            $('#guest-disk').selectMenu("setData", options);
> +        });
> +    });
> +
> +    volTextbox.change(function () {
> +        pathTextbox.val(volTextbox.val());
> +        pathTextbox.change();
> +    });
> +
> +    typeTextbox.change(function() {
> +        var pathObject = {'cdrom': ".path-section", 'disk': '.volume-section'}
> +        var selectType = $(this).val();
> +        $.each(pathObject, function(type, value) {
> +            if(selectType == type){
> +                $(value).removeClass('hidden');
> +            } else {
> +                $(value).addClass('hidden');
> +            }
> +        });
> +
> +        $.each(types, function(index, elem){
> +            if (selectType == elem.value) {
> +                var buses = new Array();
> +                $.each(elem.bus, function (index, elem) {
> +                    buses[index] = {label: elem, value: elem};
> +                });
> +                $('#guest-storage-bus').selectMenu("setData", buses);
> +                $('#guest-storage-bus-label').text(buses[0].value);
> +            }
> +        });
> +    });
>
>       var submitForm = function(event) {
> -        if(submitButton.prop('disabled')) {
> +        if (submitButton.prop('disabled')) {
>               return false;
>           }
>
>           var dev = nameTextbox.val();
>           var type = typeTextbox.val();
>           var path = pathTextbox.val();
> -        if(!path || path === '') {
> +        var bus = busTextbox.val();
> +        if (!path || path === '') {
>               return false;
>           }
>
> @@ -49,13 +151,13 @@ kimchi.guest_storage_add_main = function() {
>           var settings = {
>               vm: kimchi.selectedGuest,
>               type: type,
> -            path: path
> +            path: path,
> +            bus: bus
>           };
>
>           if(dev && dev !== '') {
>               settings['dev'] = dev;
>           }
> -
>           kimchi.addVMStorage(settings, function(result) {
>               kimchi.window.close();
>               kimchi.topic('kimchi/vmCDROMAttached').publish({
> @@ -77,7 +179,7 @@ kimchi.guest_storage_add_main = function() {
>
>       storageAddForm.on('submit', submitForm);
>       submitButton.on('click', submitForm);
> -    pathTextbox.on('input propertychange', function(event) {
> +    pathTextbox.on('change input propertychange', function(event) {
>           $(submitButton).prop('disabled', $(this).val() === '');
>       });
>   };
> diff --git a/ui/pages/guest-storage-add.html.tmpl b/ui/pages/guest-storage-add.html.tmpl
> index 71e0610..44b97e0 100644
> --- a/ui/pages/guest-storage-add.html.tmpl
> +++ b/ui/pages/guest-storage-add.html.tmpl
> @@ -41,7 +41,7 @@
>                   <h2>2. $_("Device Type")</h2>
>                   <div class="field">
>                       <p class="text-help">
> -                        $_("The device type. Currently, only \"cdrom\" is supported.")
> +                        $_("The device type. Currently,  \"cdrom\" and \"disk\" are supported.")
>                       </p>
>                       <div class="btn dropdown popable">
>                           <input id="guest-storage-type" name="type" value="cdrom" type="hidden" />
> @@ -54,20 +54,68 @@
>                   </div>
>               </section>
>               <section class="form-section">
> -                <h2>3. $_("File Path")</h2>
> +                <h2>3. $_("Device Bus")</h2>
>                   <div class="field">
> -                    <p class="text-help">
> -                        $_("The ISO file path in the server for CDROM.")
> -                    </p>
> -                    <input type="text" class="text" name="path" />
> +                    <div class="btn dropdown popable" id="guest-storage-bus">
> +                        <input id="guest-storage-bus-type" name="bus" value='ide' type="hidden" />
> +                        <span class="text" id="guest-storage-bus-label"></span>
> +                        <span class="arrow"></span>
> +                        <div class="popover">
> +                            <ul class="select-list" id="guest-storage-bus-list" data-target="guest-storage-bus-type" data-label="guest-storage-bus-label"></ul>
> +                        </div>
> +                    </div>
>                   </div>
>               </section>
> +            <div class="volume-section hidden">
> +                <section class="form-section">
> +                    <h2>4. $_("Storage Pool")</h2>
> +                    <div class="field storage-field">
> +                        <p class="text-help">
> +                            $_("Storage pool which volume located in")
> +                        </p>
> +                        <div class="btn dropdown popable">
> +                            <input value="default" id="guest-disk-pool" name="storagepool" type="hidden"/>
> +                            <span class="text" id="guest-disk-pool-label">default</span><span class="arrow"></span>
> +                            <div class="popover" style="width: 100%">
> +                                <ul class="select-list" id="guest-add-storage-pool-list" data-target="guest-disk-pool" data-label="guest-disk-pool-label"></ul>
> +                            </div>
> +                        </div>
> +                    </div>
> +                </section>
> +                <section class="form-section">
> +                    <h2>5. $_("Storage Volume")</h2>
> +                    <div class="field storage-field">
> +                        <p class="text-help">
> +                            $_("Storage volume to be attached")
> +                        </p>
> +                        <div class="btn dropdown popable" id="guest-disk">
> +                            <input id="guest-disk-vol" name="storagevol" type="hidden">
> +                            <span class="text" id="guest-disk-vol-label"></span><span class="arrow"></span>
> +                            <div class="popover" style="width: 100%">
> +                                <ul class="select-list" id="guest-add-storage-pool-list" data-target="guest-disk-vol" data-label="guest-disk-vol-label"></ul>
> +                            </div>
> +                        </div>
> +                    </div>
> +                </section>
> +            </div>
> +            <div class="path-section">
> +                <section class="form-section">
> +                    <h2>4. $_("File Path")</h2>
> +                    <div class="field">
> +                        <p class="text-help">
> +                            $_("The ISO file path in the server for CDROM.")
> +                        </p>
> +                        <input type="text" class="text" name="path" />
> +                    </div>
> +                </section>
> +            </div>
> +            </fieldset>
>           </form>
>       </div>
>       <footer>
>           <div class="btn-group">
>               <button id="guest-storage-button-add" class="btn-normal" disabled="disabled">
> -                <span class="text">$_("Attach")</span>
> +            <span class="text">$_("Attach")</span>
>               </button>
>           </div>
>       </footer>




More information about the Kimchi-devel mailing list