[Kimchi-devel] [PATCH v2][Kimchi 3/3] Add UI support to clone a guest multiple times

Aline Manera alinefm at linux.vnet.ibm.com
Tue Mar 15 17:02:32 UTC 2016


Hi all,

When the clone dialog opens, there is not default value set to the input 
box regarding the number to clone the guest.
I suggest to set it to 1 as default.

Socorro, could you do that and resend the patch?

FYI, this patch set will be applied to next branch due the code freeze 
for 2.1 release.

On 03/15/2016 01:16 AM, Rodrigo Trujillo wrote:
> This patch provides the support to clone a guest multiple times. User
> will be asked to provide the number of clone he/she wants, then UI is
> going to send that many requests to backend.
>
> Signed-off-by: Socorro Stoppler <socorro at linux.vnet.ibm.com>
> Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
> ---
>   ui/js/src/kimchi.guest_main.js | 58 ++++++++++++++++++++++++++++++++----------
>   ui/pages/guest-clone.html.tmpl | 47 ++++++++++++++++++++++++++++++++++
>   ui/pages/i18n.json.tmpl        |  3 ++-
>   3 files changed, 94 insertions(+), 14 deletions(-)
>   create mode 100644 ui/pages/guest-clone.html.tmpl
>
> diff --git a/ui/js/src/kimchi.guest_main.js b/ui/js/src/kimchi.guest_main.js
> index 2542a63..e45f439 100644
> --- a/ui/js/src/kimchi.guest_main.js
> +++ b/ui/js/src/kimchi.guest_main.js
> @@ -240,6 +240,14 @@ kimchi.vmmigrate = function(event) {
>       wok.window.open('plugins/kimchi/guest-migration.html');
>   };
>
> +kimchi.vmclone = function(event) {
> +    var button = event.target;
> +    var vm = $(button).closest('li[name=guest]');
> +    var vm_id = $(vm).attr("id");
> +    kimchi.selectedGuest = vm_id;
> +    wok.window.open('plugins/kimchi/guest-clone.html');
> +};
> +
>   kimchi.openVmSerialConsole = function(event) {
>       var button = event.target;
>       var vm = $(button).closest('li[name=guest]');
> @@ -294,6 +302,18 @@ kimchi.resetGuestFilter = function() {
>       }
>   };
>
> +
> +kimchi.initClone = function() {
> +    var numTimesToClone = $('#numberClone').val();
> +    for (var i = 0; i < numTimesToClone; i++) {
> +        kimchi.cloneGuest(kimchi.selectedGuest, function(data) {
> +            kimchi.listVmsAuto();
> +        });
> +    }
> +   wok.window.close();
> +};
> +
> +
>   kimchi.listVmsAuto = function() {
>
>       //Check if the actions button is opened or not,
> @@ -333,8 +353,8 @@ kimchi.listVmsAuto = function() {
>                       }));
>                       if (kimchi.trackingTasks.indexOf(tasks[i].id) == -1)
>                           kimchi.trackTask(tasks[i].id, null, function(err) {
> -                            wok.message.error(err.message);
> -                        }, null);
> +                        wok.message.error(err.message);
> +                    }, null);
>                   }
>               }, null, true);
>               return guests;
> @@ -752,17 +772,7 @@ kimchi.createGuestLi = function(vmObject, prevScreenImage, openMenu) {
>           });
>           guestActions.find("[name=vm-clone]").on("click", function(event) {
>               event.preventDefault();
> -            var guest = $(this).closest('li[name=guest]').attr("id");
> -            wok.confirm({
> -                title: i18n['KCHAPI6006M'],
> -                content: i18n['KCHVM6010M'],
> -                confirm: i18n['KCHAPI6002M'],
> -                cancel: i18n['KCHAPI6003M']
> -            }, function() {
> -                kimchi.cloneGuest(guest, function(data) {
> -                    kimchi.listVmsAuto();
> -                });
> -            }, null);
> +            kimchi.vmclone(event);
>           });
>           guestActions.find("[name=vm-migrate]").on('click', function(event) {
>               event.preventDefault();
> @@ -819,6 +829,28 @@ kimchi.guest_main = function() {
>       kimchi.listVmsAuto();
>   };
>
> +
> +kimchi.guest_clonevm_main = function() {
> +   kimchi.initCloneDialog();
> +};
> +
> +kimchi.initCloneDialog = function(callback) {
> +    $("#cloneFormOk").on("click", function() {
> +        //Check if input is a number
> +        var numClone = parseInt($('#numberClone').val());
> +        var err = "";
> +        if (isNaN(numClone)) {
> +            err = i18n['KCHVM0001E'];
> +            wok.message.error(err,'#alert-modal-container');
> +        } else {
> +            $("#cloneFormOk").prop("disabled", true);
> +            kimchi.initClone();
> +        }
> +   });
> +};
> +
> +
> +
>   kimchi.editTemplate = function(guestTemplate, oldPopStat) {
>       if (oldPopStat) {
>           return guestTemplate.replace("vm-action", "vm-action open");
> diff --git a/ui/pages/guest-clone.html.tmpl b/ui/pages/guest-clone.html.tmpl
> new file mode 100644
> index 0000000..25907fa
> --- /dev/null
> +++ b/ui/pages/guest-clone.html.tmpl
> @@ -0,0 +1,47 @@
> +#*
> + * Project Kimchi
> + *
> + * Copyright IBM Corp, 2016
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + *#
> +#unicode UTF-8
> +#import gettext
> +#from wok.cachebust import href
> +#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
> +#silent _ = t.gettext
> +#silent _t = t.gettext
> +<!DOCTYPE html>
> +<html>
> +<body>
> +    <div id="clone-guest-window" class="window modal-content">
> +        <div class="modal-header">
> +            <h4 class="modal-title" id="cloneModalLabel">$_("Clone a Guest")</h4>
> +        </div>
> +        <div id="cloneInfo" class="modal-body">
> +            <span id="alert-modal-container"></span>
> +            <div class="alert alert-warning" role="alert">$_("When the target guest has SCSI or iSCSI volumes, they will be cloned on the default storage pool. The same will happen when the target pool does not have enough space to clone the volumes. Do you want to continue?")</div>
> +            <div class="form-group">
> +                <label for="numberClone">$_("Number of times to clone")</label>
> +                <input type="number" class="form-control" id="numberClone" min="1" />
> +            </div>
> +        <div class="modal-footer">
> +            <button type="submit" id="cloneFormOk" class="btn btn-default">$_("Continue")</button>
> +            <button type="button" id="cloneFormCancel" data-dismiss="modal" class="btn btn-default">$_("Cancel")</button>
> +        </div>
> +    </div>
> +    <script>
> +    kimchi.guest_clonevm_main();
> +    </script>
> +</body>
> +</html>
> diff --git a/ui/pages/i18n.json.tmpl b/ui/pages/i18n.json.tmpl
> index 34a44ab..5be0a66 100644
> --- a/ui/pages/i18n.json.tmpl
> +++ b/ui/pages/i18n.json.tmpl
> @@ -64,7 +64,8 @@
>       "KCHVM6007M": "$_("Note the guest OS may ignore this request. Would you like to continue?")",
>       "KCHVM6008M": "$_("Virtual Machine delete Confirmation")",
>       "KCHVM6009M": "$_("This virtual machine is not persistent. Power Off will delete it. Continue?")",
> -    "KCHVM6010M": "$_("When the target guest has SCSI or iSCSI volumes, they will be cloned on default storage pool. The same will happen when the target pool does not have enough space to clone the volumes. Do you want to continue?")",
> +
> +    "KCHVM0001E": "$_("Input is not a number")",
>
>       "KCHVMCD6001M": "$_("This CDROM will be detached permanently and you can re-attach it. Continue to detach it?")",
>       "KCHVMCD6003M": "$_("Attaching...")",




More information about the Kimchi-devel mailing list