Пример #1
0
  function _fill(context, element) {

    if (Config.isFeatureEnabled("vcenter_vm_folder")){
      var vcenterVMFolderContext = context;
      var template_public_cloud_type = element.TEMPLATE.HYPERVISOR

      if ($.isEmptyObject(template_public_cloud_type)) {
        vcenterVMFolderContext.html("");
      } else {
        if (template_public_cloud_type === 'vcenter') {
          var vcenter_vm_folder = element.TEMPLATE.VCENTER_VM_FOLDER
          vcenterVMFolderContext.html(VcenterVMFolderTemplate());
          $("#vcenter_vm_folder_input", vcenterVMFolderContext).val(vcenter_vm_folder);
          $("#vcenter_vm_folder_input", vcenterVMFolderContext).data("original_value",vcenter_vm_folder);
        } else {
          vcenterVMFolderContext.html("");
        }
      }
    }
  }
Пример #2
0
  function _fill(context, templateJSON) {

    if (templateJSON['MEMORY_COST'] && templateJSON['MEMORY_UNIT_COST'] && templateJSON['MEMORY_UNIT_COST'] == "GB") {
      templateJSON['MEMORY_COST'] = templateJSON['MEMORY_COST'] * 1024;
    }
    if (templateJSON['DISK_COST']) {
      templateJSON['DISK_COST'] = templateJSON['DISK_COST'] * 1024;
    }

    that.templateDISKS = $.extend(true, {}, templateJSON.DISK);
    localStorage.setItem("disksJSON", JSON.stringify(that.templateDISKS));
    var sunstone_template = templateJSON.SUNSTONE;
    if (sunstone_template) {
      if (sunstone_template["NETWORK_SELECT"] &&
          sunstone_template["NETWORK_SELECT"].toUpperCase() == "NO") {
        $("#sunstone_network_select", context).attr("checked", "checked");
      }

      delete sunstone_template["NETWORK_SELECT"];
    }

    if (Config.isFeatureEnabled("vcenter_vm_folder")) {
      if (templateJSON["HYPERVISOR"] == 'vcenter' &&
        templateJSON["VCENTER_VM_FOLDER"]) {
        WizardFields.fillInput($("#vcenter_vm_folder", context), templateJSON["VCENTER_VM_FOLDER"]);
      }
    } else {
      $(".vcenter_vm_folder_input", context).remove();
    }

    delete templateJSON["VCENTER_VM_FOLDER"];

    if (templateJSON["HYPERVISOR"] == 'vcenter') {
      var publicClouds = templateJSON["PUBLIC_CLOUD"];

      if (publicClouds != undefined) {
        if (!$.isArray(publicClouds)){
          publicClouds = [publicClouds];
        }

        $.each(publicClouds, function(){
          if(this["TYPE"] == "vcenter"){
            WizardFields.fillInput($("#vcenter_template_ref", context), this["VCENTER_TEMPLATE_REF"]);
            return false;
          }
        });
      }
    }

    // LXD specific attributes
    if (templateJSON["HYPERVISOR"] == 'lxd') {
		fillLXD(context, templateJSON)
    }

    if (templateJSON["HYPERVISOR"]) {
      $("input[name='hypervisor'][value='"+templateJSON["HYPERVISOR"]+"']", context).trigger("click")
      delete templateJSON["HYPERVISOR"];
    }

    if (templateJSON["USER_INPUTS"]) {

      if (templateJSON["USER_INPUTS"]["VCENTER_RESOURCE_POOL"]) {
        var rp = UserInputs.unmarshall(templateJSON["USER_INPUTS"]["VCENTER_RESOURCE_POOL"]);
        $('.modify_rp', context).val('list');
        $('.initial_rp', context).val(rp.initial);
        $('.available_rps', context).val(rp.params);

        delete templateJSON["USER_INPUTS"]["VCENTER_RESOURCE_POOL"];
      }
    }

    if (templateJSON["VCENTER_RESOURCE_POOL"]) {
      $('.modify_rp', context).val('fixed');
      WizardFields.fillInput($('.initial_rp', context), templateJSON["VCENTER_RESOURCE_POOL"]);

      delete templateJSON["VCENTER_RESOURCE_POOL"];
    }

    if (templateJSON["VCENTER_TEMPLATE_REF"]){
      WizardFields.fillInput($("#vcenter_template_ref", context), templateJSON["VCENTER_TEMPLATE_REF"]);
      delete templateJSON["VCENTER_TEMPLATE_REF"];
    }

    if (templateJSON["VCENTER_CCR_REF"]){
      WizardFields.fillInput($("#vcenter_ccr_ref", context), templateJSON["VCENTER_CCR_REF"]);
      delete templateJSON["VCENTER_CCR_REF"];
    }

    if (templateJSON["VCENTER_INSTANCE_ID"]){
      WizardFields.fillInput($("#vcenter_instance_id", context), templateJSON["VCENTER_INSTANCE_ID"]);
      delete templateJSON["VCENTER_INSTANCE_ID"];
    }

    CapacityCreate.fill($("div.capacityCreate", context), templateJSON);

    if (templateJSON["AS_UID"]){
      var asuidJSON = templateJSON["AS_UID"];
      var selectedResources = {
        ids : asuidJSON
      };
      this.usersTable.selectResourceTableSelect(selectedResources);
      delete templateJSON["AS_UID"];
    }

    if (templateJSON["AS_GID"]){
      var asgidJSON = templateJSON["AS_GID"];
      var selectedResources = {
        ids : asgidJSON
      };
      this.groupTable.selectResourceTableSelect(selectedResources);
      delete templateJSON["AS_GID"];
    }

    WizardFields.fill(context, templateJSON);
  }
Пример #3
0
  function _retrieve(context) {
    var templateJSON = WizardFields.retrieve(context);
    if (templateJSON["HYPERVISOR"] == 'vcenter') {
      templateJSON["VCENTER_TEMPLATE_REF"] = WizardFields.retrieveInput($("#vcenter_template_ref", context));
      templateJSON["VCENTER_CCR_REF"] = WizardFields.retrieveInput($("#vcenter_ccr_ref", context));
      templateJSON["VCENTER_INSTANCE_ID"] = WizardFields.retrieveInput($("#vcenter_instance_id", context));

      if (Config.isFeatureEnabled("vcenter_vm_folder")) {
        templateJSON["VCENTER_VM_FOLDER"] = WizardFields.retrieveInput($("#vcenter_vm_folder", context))
      }
    }

    if (templateJSON["HYPERVISOR"] == 'lxd') {
      templateJSON["LXD_SECURITY_PRIVILEGED"] = WizardFields.retrieveInput($("#lxd_security_privileged", context));
      templateJSON["LXD_PROFILE"] = WizardFields.retrieveInput($("#lxd_profile", context));
      templateJSON["LXD_SECURITY_NESTING"] = WizardFields.retrieveInput($("#lxd_security_nesting", context));
    }

    var sunstone_template = {};

    if ($('#sunstone_network_select:checked', context).length > 0) {
      sunstone_template["NETWORK_SELECT"] = "NO"
    }

    if (!$.isEmptyObject(sunstone_template)) {
      templateJSON['SUNSTONE'] = sunstone_template;
    }

    var userInputs = {};

    // Retrieve Resource Pool Attribute
    var rpInput = $(".vcenter_rp_input", context);
    if (rpInput.length > 0) {
      var rpModify = WizardFields.retrieveInput($('.modify_rp', rpInput));
      var rpInitial = WizardFields.retrieveInput($('.initial_rp', rpInput));
      var rpParams = WizardFields.retrieveInput($('.available_rps', rpInput));

      if (rpModify === 'fixed' && rpInitial !== '') {
        templateJSON['VCENTER_RESOURCE_POOL'] = rpInitial;
      } else if (rpModify === 'list' && rpParams !== '') {
        var rpUserInputs = UserInputs.marshall({
            type: 'list',
            description: Locale.tr("Which resource pool you want this VM to run in?"),
            initial: rpInitial,
            params: WizardFields.retrieveInput($('.available_rps', rpInput))
          });

        userInputs['VCENTER_RESOURCE_POOL'] = rpUserInputs;
      }
    }

    // Since the USER_INPUTS section is not enabled for vCenter, we can assume that there are no more user inputs defined
    if (!$.isEmptyObject(userInputs)) {
      templateJSON['USER_INPUTS'] = userInputs;
    }

    $.extend(true, templateJSON, CapacityCreate.retrieve($("div.capacityCreate", context)));

    if (templateJSON['MEMORY_COST'] && templateJSON['MEMORY_UNIT_COST'] && templateJSON['MEMORY_UNIT_COST'] == "GB") {
      templateJSON['MEMORY_COST'] = templateJSON['MEMORY_COST'] / 1024;
    }
    if (templateJSON['DISK_COST']) {
      templateJSON['DISK_COST'] = (templateJSON['DISK_COST'] / 1024).toString();
    }

    var as_uid = this.usersTable.retrieveResourceTableSelect();
    if (as_uid){
      templateJSON["AS_UID"] = as_uid;
    }

    var as_gid = this.groupTable.retrieveResourceTableSelect();
    if (as_gid){
      templateJSON["AS_GID"] = as_gid;
    }
    return templateJSON;
  }
Пример #4
0
        success: function (request, template_json) {
          that.template_objects.push(template_json);

          templatesContext.append(
            TemplateRowHTML(
              { element: template_json.VMTEMPLATE,
                capacityInputsHTML: CapacityInputs.html()
              }) );

          DisksResize.insert({
            template_json: template_json,
            disksContext: $(".disksContext"  + template_json.VMTEMPLATE.ID, context),
            force_persistent: $("input.instantiate_pers", context).prop("checked")
          });

          NicsSection.insert(template_json,
            $(".nicsContext"  + template_json.VMTEMPLATE.ID, context),
            { 'forceIPv4': true,
              'securityGroups': Config.isFeatureEnabled("secgroups")
            });

          var inputs_div = $(".template_user_inputs" + template_json.VMTEMPLATE.ID, context);

          UserInputs.vmTemplateInsert(
              inputs_div,
              template_json,
              {text_header: '<i class="fa fa-gears"></i> '+Locale.tr("Custom Attributes")});

          inputs_div.data("opennebula_id", template_json.VMTEMPLATE.ID);

          capacityContext = $(".capacityContext"  + template_json.VMTEMPLATE.ID, context);
          CapacityInputs.setup(capacityContext);
          CapacityInputs.fill(capacityContext, template_json.VMTEMPLATE);

          var cpuCost    = template_json.VMTEMPLATE.TEMPLATE.CPU_COST;
          var memoryCost = template_json.VMTEMPLATE.TEMPLATE.MEMORY_COST;

          if (cpuCost == undefined){
            cpuCost = Config.onedConf.DEFAULT_COST.CPU_COST;
          }

          if (memoryCost == undefined){
            memoryCost = Config.onedConf.DEFAULT_COST.MEMORY_COST;
          }

          if ((cpuCost != 0 || memoryCost != 0) && Config.isFeatureEnabled("showback")) {
            $(".capacity_cost_div", capacityContext).show();

            CapacityInputs.setCallback(capacityContext, function(values){
              var cost = 0;

              if (values.CPU != undefined){
                cost += cpuCost * values.CPU;
              }

              if (values.MEMORY != undefined){
                cost += memoryCost * values.MEMORY;
              }

              $(".cost_value", capacityContext).html(cost.toFixed(2));
            });
          }

          idsDone += 1;
          if (idsLength == idsDone){
            Sunstone.enableFormPanelSubmit(that.tabId);
          }
        },
Пример #5
0
        success: function(request, extendedTemplateJSON) {
          var extendedTemplateDisk = extendedTemplateJSON.VMTEMPLATE.TEMPLATE.DISK;
          var extendedDisks = []
          if ($.isArray(extendedTemplateDisk)) {
            extendedDisks = extendedTemplateDisk
          } else if (!$.isEmptyObject(extendedTemplateDisk)) {
            extendedDisks = [extendedTemplateDisk]
          }

          var disk_cost = template_json.VMTEMPLATE.TEMPLATE.DISK_COST;

          if (disk_cost == undefined) {
            disk_cost = Config.onedConf.DEFAULT_COST.DISK_COST;
          }

          if (disk_cost != 0 && Config.isFeatureEnabled("showback")) {
            $(".provision_create_template_disk_cost_div", disksContext).show();

            disksContext.on("input", '.uinput-slider', function(){
              var cost = 0;
              $('.uinput-slider-val', disksContext).each(function(){
                if ($(this).val() > 0) {
                  cost += $(this).val() * 1024 * disk_cost;
                }

                var diskContext = $(this).closest(".diskContainer");
                cost += diskContext.data('disk_snapshot_total_cost');
              })
              $(".cost_value", disksContext).html(cost.toFixed(2));
            });
          } else {
            $(".provision_create_template_disk_cost_div", disksContext).hide();
          }

          var diskContext;
          $(".disksContainer", disksContext).html("");
          $.each(extendedDisks, function(disk_id, disk) {
            diskContext = $('<div class="row diskContainer">'+
                '<div class="large-12 columns diskSlider">' +
                '</div>' +
              '</div>').appendTo($(".disksContainer", disksContext));

            diskContext.data('template_disk', disks[disk_id]);

            var sizeGB = Math.round(disk.SIZE / 1024);
            diskContext.data('original_size', sizeGB);

            var disk_snapshot_total_size = 0;
            if (disk.DISK_SNAPSHOT_TOTAL_SIZE != undefined) {
              disk_snapshot_total_size = parseInt(disk.DISK_SNAPSHOT_TOTAL_SIZE);
            }

            diskContext.data('disk_snapshot_total_size', disk_snapshot_total_size);
            diskContext.data('disk_snapshot_total_cost', disk_snapshot_total_size * disk_cost);

            var label = disk.IMAGE ? disk.IMAGE : Locale.tr("Volatile Disk");
            var disabled =
              ( (disk.PERSISTENT && disk.PERSISTENT.toUpperCase() == "YES") ||
                (disk.TYPE && OpenNebulaImage.TYPES[disk.TYPE] == OpenNebulaImage.TYPES.CDROM) );

            RangeSlider.insert({
              'label': Locale.tr("DISK") + ' ' + disk_id + ': ' + label,
              'unitLabel': 'GB',
              'name': 'SIZE',
              'min': sizeGB,
              'max': sizeGB + 500,
              'step': 10,
              'initial': sizeGB,
              'disabled': disabled
            }, $(".diskSlider", diskContext));
          })
        }
Пример #6
0
  /**
   * @param {Object} opts - template_json: extended info template (with DISK/SIZE)
   *                      - disksContext: jquery selector, where to place the html
   *                      - force_persistent {bool}: mark all disks as if they
   *                          were persistent, disabling resize inputs
   *                      - cost_callback: function to call when the cost changes
   */
  function _insert(opts) {

    var disksContext = opts.disksContext;

    var template_disk = opts.template_json.VMTEMPLATE.TEMPLATE.DISK;
    var disks = [];
    if ($.isArray(template_disk)) {
      disks = template_disk;
    } else if (!$.isEmptyObject(template_disk)) {
      disks = [template_disk];
    }

    if (opts.template_base_json && opts.template_base_json.VMTEMPLATE) {
      var template_base_disk = opts.template_base_json.VMTEMPLATE.TEMPLATE.DISK;
      var disks_base = [];
      if ($.isArray(template_base_disk)) {
        disks_base = template_base_disk;
      } else if (!$.isEmptyObject(template_base_disk)) {
        disks_base = [template_base_disk];
      }
    }

    if (disks.length > 0) {
      disksContext.html(DisksResizeTemplate());

      var disk_cost = opts.template_json.VMTEMPLATE.TEMPLATE.DISK_COST;

      if (disk_cost == undefined) {
        disk_cost = Config.onedConf.DEFAULT_COST.DISK_COST;
      }

      disksContext.off("change", "input");

      if (Config.isFeatureEnabled("showback")) {
        if(disk_cost != 0){
          $(".provision_create_template_disk_cost_div", disksContext).show();
        }

        disksContext.on("change", "input", function(){
          _calculateCost(disksContext, disk_cost, opts.cost_callback);
        });

        _calculateCost(disksContext, disk_cost, opts.cost_callback);
      } else {
        $(".provision_create_template_disk_cost_div", disksContext).hide();
      }

      var diskContext;
      $(".disksContainer", disksContext).html("");

      $.each(disks, function(disk_id, disk) {
        diskContext = $(
          "<div class=\"row diskContainer\">"+
            "<div class=\"small-12 columns\">"+
              "<label></label>"+
            "</div>"+
            "<div class=\"large-12 columns diskSlider\">" +
            "</div>" +
          "</div>").appendTo($(".disksContainer", disksContext));
        if (disks_base) {
          disks_base[disk_id].SIZE = disk.SIZE;
          disks_base[disk_id].ORIGINAL_SIZE = disk.ORIGINAL_SIZE;
          diskContext.data("template_disk", disks_base[disk_id]);
        }

        var disk_snapshot_total_size = 0;
        if (disk.DISK_SNAPSHOT_TOTAL_SIZE != undefined) {
          disk_snapshot_total_size = parseInt(disk.DISK_SNAPSHOT_TOTAL_SIZE);
        }

        diskContext.data("disk_snapshot_total_size", disk_snapshot_total_size);
        diskContext.data("disk_snapshot_total_cost", disk_snapshot_total_size * disk_cost);

        var volatile = (disk.IMAGE == undefined && disk.IMAGE_ID == undefined);

        var label;

        if (volatile){
          label = Locale.tr("Volatile Disk");
        } else {
          label = disk.IMAGE ? disk.IMAGE : Locale.tr("Image was not found");
        }

        $("label", diskContext).text(Locale.tr("DISK") + " " + disk_id + ": " + label);

        var persistent =
          ( opts.force_persistent ||
            (disk.PERSISTENT && disk.PERSISTENT.toUpperCase() == "YES") );

        var disabled =
          ( persistent ||
            (disk.TYPE && OpenNebulaImage.TYPES[disk.TYPE] == OpenNebulaImage.TYPES.CDROM) );

        if (persistent){
          $("label", diskContext).append("<i class=\"disk-resize-icon has-tip left fas fa-lg fa-floppy-o\" title=\"" +
              Locale.tr("Persistent image. The changes will be saved back to the datastore after the VM is terminated (ie goes into DONE state)") + "\"></i>");

        }else{
          $("label", diskContext).append("<i class=\"disk-resize-icon has-tip left fas fa-lg fa-recycle\" title=\"" +
              Locale.tr("Non-persistent disk. The changes will be lost once the VM is terminated (ie goes into DONE state)") + "\"></i>");

        }

        if (disk.IMAGE_STATE){
          var color_class = OpenNebulaImage.stateColor(disk.IMAGE_STATE) + "-color";

          $("label", diskContext).append("<i class=\""+color_class+" disk-resize-icon has-tip left fas fa-square\" title=\"" +
              Locale.tr("Image state: ") + OpenNebulaImage.stateStr(disk.IMAGE_STATE) + "\"></i>");
        } else if (disk.IMAGE || disk.IMAGE_ID) {
          var color_class = "error-color";

          $("label", diskContext).append("<i class=\""+color_class+" disk-resize-icon has-tip left fas fa-square\" title=\"" +
              Locale.tr("Image was not found") + "\"></i>");
        } // else is volatile, does not have state

        var attr;

        if (disabled){
          if (disk.SIZE){
            attr = UserInputs.parse("SIZE","O|fixed|"+label+"||"+disk.SIZE);
          } else {
            attr = UserInputs.parse("SIZE","O|fixed|"+label+"||-");
          }
        } else {
          if (disk.SIZE != undefined){
            // Range from original size to size + 500GB
            var min = parseInt(disk.SIZE);
            var max = min + Humanize.sizeToMB("1024GB");

            attr = UserInputs.parse(
              "SIZE",
              "O|range|"+label+"|"+min+".."+max+"|"+min);
          } else {
            attr = UserInputs.parse(
              "SIZE",
              "M|number|"+label+"||");
          }
        }
        attr.max_value = "";
        if(!opts.uinput_mb){
          $(".diskSlider", diskContext).html(UserInputs.attributeInput(attr));
        } else {
          UserInputs.insertAttributeInputMB(attr, $(".diskSlider", diskContext));
        }
      });

    } else {
      disksContext.html("");
    }
  }
Пример #7
0
    $.each(this.selected_nodes, function(index, template_id) {
      var extra_info = {
        'hold': hold
      };

      var tmp_json = WizardFields.retrieve($(".template_user_inputs" + template_id, context));
      var disks = DisksResize.retrieve($(".disksContext"  + template_id, context));
      if (disks.length > 0) {
        tmp_json.DISK = disks;
      }

      var networks = NicsSection.retrieve($(".nicsContext"  + template_id, context));

      var vmgroup = VMGroupSection.retrieve($(".vmgroupContext"+ template_id));

      if(vmgroup){
        $.extend(tmp_json, vmgroup);
      }

      var nics = [];
      var pcis = [];

      $.each(networks, function(){
        if (this.TYPE == "NIC"){
          pcis.push(this);
        }else{
          nics.push(this);
        }
      });

      if (nics.length > 0) {
        tmp_json.NIC = nics;
      }

      // Replace PCIs of type nic only
      var original_tmpl = that.template_objects[index].VMTEMPLATE;

      var regular_pcis = [];

      if(original_tmpl.TEMPLATE.PCI != undefined){
        var original_pcis;

        if ($.isArray(original_tmpl.TEMPLATE.PCI)){
          original_pcis = original_tmpl.TEMPLATE.PCI;
        } else if (!$.isEmptyObject(original_tmpl.TEMPLATE.PCI)){
          original_pcis = [original_tmpl.TEMPLATE.PCI];
        }

        $.each(original_pcis, function(){
          if(this.TYPE != "NIC"){
            regular_pcis.push(this);
          }
        });
      }

      pcis = pcis.concat(regular_pcis);

      if (pcis.length > 0) {
        tmp_json.PCI = pcis;
      }

      if (Config.isFeatureEnabled("vcenter_vm_folder")){
        if(!$.isEmptyObject(original_tmpl.TEMPLATE.HYPERVISOR) &&
          original_tmpl.TEMPLATE.HYPERVISOR === 'vcenter'){
          $.extend(tmp_json, VcenterVMFolder.retrieveChanges($(".vcenterVMFolderContext"  + template_id)));
        }
      }

      capacityContext = $(".capacityContext"  + template_id, context);
      $.extend(tmp_json, CapacityInputs.retrieveChanges(capacityContext));

      extra_info['template'] = tmp_json;
        for (var i = 0; i < n_times_int; i++) {
          extra_info['vm_name'] = vm_name.replace(/%i/gi, i); // replace wildcard

          Sunstone.runAction("Template."+action, [template_id], extra_info);
        }
    });
Пример #8
0
        success: function(request, response){
          Sunstone.insertPanels(TAB_ID, response, TAB_ID, $(".provision-sunstone-info", context));

          var data = response.VM;
          var state = get_provision_vm_state(data);

          // helper, cleaner code
          function enabled(action){
            return Config.isTabActionEnabled("provision-tab", action) &&
                   StateActions.enabledStateAction(action, data.STATE, data.LCM_STATE);
          }

          if (enabled("VM.reboot") || enabled("VM.reboot_hard")){
            $(".provision_reboot_confirm_button", context).show();
          } else {
            $(".provision_reboot_confirm_button", context).hide();
          }

          if (enabled("VM.poweroff") || enabled("VM.poweroff_hard")){
            $(".provision_poweroff_confirm_button", context).show();
          } else {
            $(".provision_poweroff_confirm_button", context).hide();
          }

          if (enabled("VM.undeploy") || enabled("VM.undeploy_hard")){
            $(".provision_undeploy_confirm_button", context).show();
          } else {
            $(".provision_undeploy_confirm_button", context).hide();
          }

          if (enabled("VM.resume")){
            $(".provision_resume_button", context).show();
          } else {
            $(".provision_resume_button", context).hide();
          }

          if (enabled("VM.terminate") || enabled("VM.terminate_hard")){
            $(".provision_terminate_confirm_button", context).show();
          } else {
            $(".provision_terminate_confirm_button", context).hide();
          }

          if(Config.isTabActionEnabled("provision-tab", "VM.save_as_template")){
            if (enabled("VM.save_as_template")){
              $(".provision_save_as_template_confirm_button", context).show();
              $(".provision_save_as_template_confirm_button_disabled", context).hide();
            } else {
              $(".provision_save_as_template_confirm_button", context).hide();
              $(".provision_save_as_template_confirm_button_disabled", context).show();
            }
          }else{
            $(".provision_save_as_template_confirm_button", context).hide();
            $(".provision_save_as_template_confirm_button_disabled", context).hide();
          }

          if (OpenNebula.VM.isVNCSupported(data) ||
             OpenNebula.VM.isSPICESupported(data)) {

            $(".provision_vnc_button", context).show();
            $(".provision_vnc_button_disabled", context).hide();
          }else{
            $(".provision_vnc_button", context).hide();
            $(".provision_vnc_button_disabled", context).show();
          }

          $(".provision_info_vm", context).attr("vm_id", data.ID);
          $(".provision_info_vm", context).data("vm", data);

          $(".provision_info_vm_name", context).text(data.NAME);

          if (Config.isTabActionEnabled("provision-tab", "VM.rename")) {
            context.off("click", ".provision_info_vm_rename a");
            context.on("click", ".provision_info_vm_rename a", function() {
              var valueStr = $(".provision_info_vm_name", context).text();
              $(".provision_info_vm_name", context).html("<input class=\"input_edit_value_rename\" type=\"text\" value=\"" + valueStr + "\"/>");
            });

            context.off("change", ".input_edit_value_rename");
            context.on("change", ".input_edit_value_rename", function() {
              var valueStr = $(".input_edit_value_rename", context).val();
              if (valueStr != "") {
                OpenNebula.VM.rename({
                  data : {
                    id: vm_id,
                    extra_param: {
                      "name" : valueStr
                    }
                  },
                  success: function(request, response){
                    update_provision_vm_info(vm_id, context);
                  },
                  error: function(request, response){
                    Notifier.onError(request, response);
                  }
                });
              }
            });
          }

          $(".provision-pricing-table_vm_info", context).html(
              "<li class=\"provision-title\">"+
                "<span class=\"without-link "+ state.color +"-color\">"+
                  "<span class=\""+ state.color +"-color right\" title=\""+state.str+"\">"+
                    "<i class=\"fas fa-square\"/>"+
                  "</span>"+
                  state.str+
                "</span>"+
              "</li>"+
              "<li class=\"provision-bullet-item\" >"+
                "<span>"+
                  "<i class=\"fas fa-fw fa-lg fa-laptop\"/> "+
                  "x"+TemplateUtils.htmlEncode(data.TEMPLATE.CPU)+" - "+
                  ((data.TEMPLATE.MEMORY > 1000) ?
                    (Math.floor(data.TEMPLATE.MEMORY/1024)+"GB") :
                    (TemplateUtils.htmlEncode(data.TEMPLATE.MEMORY)+"MB"))+
                "</span>"+
                " - "+
                "<span>"+
                  get_provision_disk_image(data) +
                "</span>"+
              "</li>"+
              "<li class=\"provision-bullet-item\" >"+
                "<span>"+
                  get_provision_ips(data) +
                "</span>"+
              "</li>"+
              "<li class=\"provision-bullet-item-last text-right\">"+
                "<span class=\"left\">"+
                  "<i class=\"fas fa-fw fa-lg fa-user\"/> "+
                  data.UNAME+
                "</span>"+
                "<span>"+
                  "<i class=\"fas fa-fw fa-lg fa-clock-o\"/> "+
                  Humanize.prettyTimeAgo(data.STIME)+
                  " - "+
                  "ID: "+
                  data.ID+
                "</span>"+
              "</li>");

          if (Config.isFeatureEnabled("show_vcenter_info") && data.USER_TEMPLATE.HYPERVISOR === "vcenter"){
            var vcenter_info = "";
            if (Object.keys(data.MONITORING).length !== 0){
              vcenter_info = "<thead><tr><th>" + Locale.tr("vCenter information") + "</th></tr></thead>" +
                "<tbody>" +
                  "<tr>" +
                    "<td>" + Locale.tr("GUEST STATE") + "</td>" +
                    "<td>" + ((data.MONITORING.VCENTER_GUEST_STATE) ? data.MONITORING.VCENTER_GUEST_STATE : "-") + "</td>" +
                    "<td>" + Locale.tr("VMWARETOOLS RUNNING STATUS") + "</td>" +
                    "<td>" + ((data.MONITORING.VCENTER_VMWARETOOLS_RUNNING_STATUS) ? data.MONITORING.VCENTER_VMWARETOOLS_RUNNING_STATUS : "-") + "</td>" +
                  "</tr>" +
                  "<tr>" +
                    "<td>" + Locale.tr("VMWARETOOLS VERSION") + "</td>" +
                    "<td>" + ((data.MONITORING.VCENTER_VMWARETOOLS_VERSION) ? data.MONITORING.VCENTER_VMWARETOOLS_VERSION : "-") + "</td>" +
                    "<td>" + Locale.tr("VMWARETOOLS VERSION STATUS") + "</td>" +
                    "<td>" + ((data.MONITORING.VCENTER_VMWARETOOLS_VERSION_STATUS) ? data.MONITORING.VCENTER_VMWARETOOLS_VERSION_STATUS : "-") + "</td>" +
                  "</tr>" +
                "</tbody>";
            }
            $(".provision-sunstone-vcenter-list", context).html(vcenter_info);
          }

          $(".provision_confirm_action:first", context).html("");

          $(".provision_info_vm", context).css("visibility", "visible");
          $(".provision_info_vm_loading", context).hide();

          //$(window).scrollTop(tempScrollTop);

          OpenNebula.VM.monitor({
            data : {
              timeout: true,
              id: data.ID,
              monitor: {
                monitor_resources : "MONITORING/CPU,MONITORING/MEMORY,MONITORING/NETTX,MONITORING/NETRX"
              }
            },
            success: function(request, response){
              var vm_graphs = [
                  {
                      monitor_resources : "MONITORING/CPU",
                      labels : "Real CPU",
                      humanize_figures : false,
                      div_graph : $(".vm_cpu_provision_graph", context)
                  },
                  {
                      monitor_resources : "MONITORING/MEMORY",
                      labels : "Real MEM",
                      humanize_figures : true,
                      div_graph : $(".vm_memory_provision_graph", context)
                  },
                  {
                      labels : "Network reception",
                      monitor_resources : "MONITORING/NETRX",
                      humanize_figures : true,
                      convert_from_bytes : true,
                      div_graph : $(".vm_net_rx_provision_graph", context)
                  },
                  {
                      labels : "Network transmission",
                      monitor_resources : "MONITORING/NETTX",
                      humanize_figures : true,
                      convert_from_bytes : true,
                      div_graph : $(".vm_net_tx_provision_graph", context)
                  },
                  {
                      labels : "Network reception speed",
                      monitor_resources : "MONITORING/NETRX",
                      humanize_figures : true,
                      convert_from_bytes : true,
                      y_sufix : "B/s",
                      derivative : true,
                      div_graph : $(".vm_net_rx_speed_provision_graph", context)
                  },
                  {
                      labels : "Network transmission speed",
                      monitor_resources : "MONITORING/NETTX",
                      humanize_figures : true,
                      convert_from_bytes : true,
                      y_sufix : "B/s",
                      derivative : true,
                      div_graph : $(".vm_net_tx_speed_provision_graph", context)
                  }
              ];

              for(var i=0; i<vm_graphs.length; i++) {
                  Graphs.plot(
                      response,
                      vm_graphs[i]
                  );
              }
            }
          });
        }
Пример #9
0
  /**
   * @param {Object} opts - template_json: extended info template (with DISK/SIZE)
   *                      - disksContext: jquery selector, where to place the html
   *                      - force_persistent {bool}: mark all disks as if they
   *                          were persistent, disabling resize inputs
   */
  function _insert(opts) {

    var disksContext = opts.disksContext;

    var template_disk = opts.template_json.VMTEMPLATE.TEMPLATE.DISK
    var disks = []
    if ($.isArray(template_disk)) {
      disks = template_disk
    } else if (!$.isEmptyObject(template_disk)) {
      disks = [template_disk]
    }

    if (disks.length > 0) {
      disksContext.html(DisksResizeTemplate());

      var disk_cost = opts.template_json.VMTEMPLATE.TEMPLATE.DISK_COST;

      if (disk_cost == undefined) {
        disk_cost = Config.onedConf.DEFAULT_COST.DISK_COST;
      }

      if (disk_cost != 0 && Config.isFeatureEnabled("showback")) {
        $(".provision_create_template_disk_cost_div", disksContext).show();

        disksContext.on("input", '.uinput-slider', function(){
          var cost = 0;
          $('.uinput-slider-val', disksContext).each(function(){
            if ($(this).val() > 0) {
              cost += $(this).val() * 1024 * disk_cost;
            }

            var diskContext = $(this).closest(".diskContainer");
            cost += diskContext.data('disk_snapshot_total_cost');
          })
          $(".cost_value", disksContext).html(cost.toFixed(2));
        });
      } else {
        $(".provision_create_template_disk_cost_div", disksContext).hide();
      }

      var diskContext;
      $(".disksContainer", disksContext).html("");
      $.each(disks, function(disk_id, disk) {
        diskContext = $(
          '<div class="row diskContainer">'+
            '<div class="small-12 columns">'+
              '<label></label>'+
            '</div>'+
            '<div class="large-12 columns diskSlider">' +
            '</div>' +
          '</div>').appendTo($(".disksContainer", disksContext));

        diskContext.data('template_disk', disk);

        var disk_snapshot_total_size = 0;
        if (disk.DISK_SNAPSHOT_TOTAL_SIZE != undefined) {
          disk_snapshot_total_size = parseInt(disk.DISK_SNAPSHOT_TOTAL_SIZE);
        }

        diskContext.data('disk_snapshot_total_size', disk_snapshot_total_size);
        diskContext.data('disk_snapshot_total_cost', disk_snapshot_total_size * disk_cost);

        var label = disk.IMAGE ? disk.IMAGE : Locale.tr("Volatile Disk");
        $("label", diskContext).text(Locale.tr("DISK") + ' ' + disk_id + ': ' + label);

        var persistent =
          ( opts.force_persistent ||
            (disk.PERSISTENT && disk.PERSISTENT.toUpperCase() == "YES") );

        var disabled =
          ( persistent ||
            (disk.TYPE && OpenNebulaImage.TYPES[disk.TYPE] == OpenNebulaImage.TYPES.CDROM) );

        if (persistent){
          $("label", diskContext).append('<i class="disk-resize-icon fa-border has-tip left fa fa-lg fa-floppy-o" title="' +
              Locale.tr("Persistent image. The changes will be saved back to the datastore after the VM is shut down") + '"></i>')

        }else{
          $("label", diskContext).append('<i class="disk-resize-icon fa-border has-tip left fa fa-lg fa-recycle" title="' +
              Locale.tr("Non-persistent disk. The changes will be lost once the VM is shut down") + '"></i>')

        }

        if (disk.IMAGE_STATE){
          var color_class = OpenNebulaImage.stateColor(disk.IMAGE_STATE) + "-color";

          $("label", diskContext).append('<i class="'+color_class+' fa-border has-tip left fa fa-square" title="' +
              Locale.tr("Image state: ") + OpenNebulaImage.stateStr(disk.IMAGE_STATE) + '"></i>')
        } else {
          var color_class = "error-color";

          $("label", diskContext).append('<i class="'+color_class+' fa-border has-tip left fa fa-square" title="' +
              Locale.tr("Image was not found") + '"></i>')
        }

        var attr;

        if (disk.SIZE) {
          if (disabled){
            attr = UserInputs.parse("SIZE","O|fixed|"+label+"||"+disk.SIZE);
          } else {
            // Range from original size to size + 500GB
            var min = parseInt(disk.SIZE);
            var max = min + 512000;

            attr = UserInputs.parse(
              "SIZE",
              "O|range|"+label+"|"+min+".."+max+"|"+min);
          }
        } else {
          attr = UserInputs.parse("SIZE","O|fixed|"+label+"||-");
        }

        UserInputs.insertAttributeInputMB(attr, $(".diskSlider", diskContext));
      })

    } else {
      disksContext.html("");
    }
  }
Пример #10
0
 function _setup(context) {
   if (!Config.isFeatureEnabled("vcenter_vm_folder")){
     $(context).remove();
   }
 }
Пример #11
0
  function _fill(context, templateJSON) {
    var sunstone_template = templateJSON.SUNSTONE;
    if(templateJSON["MEMORY_UNIT_COST"] =="GB")
      templateJSON["MEMORY_COST"] = templateJSON["MEMORY_COST"] / 1024;
    if (sunstone_template) {
      if (sunstone_template["NETWORK_SELECT"] &&
          sunstone_template["NETWORK_SELECT"].toUpperCase() == "NO") {
        $("#sunstone_network_select", context).attr("checked", "checked");
      }

      delete sunstone_template["NETWORK_SELECT"];
    }


    if (Config.isFeatureEnabled("vcenter_vm_folder")) {
      if (templateJSON["HYPERVISOR"] == 'vcenter' &&
        templateJSON["VCENTER_VM_FOLDER"]) {
        WizardFields.fillInput($("#vcenter_vm_folder", context), templateJSON["VCENTER_VM_FOLDER"]);
      }
    } else {
      $(".vcenter_vm_folder_input", context).remove();
    }

    delete templateJSON["VCENTER_VM_FOLDER"];

    if (templateJSON["HYPERVISOR"] == 'vcenter') {
      var publicClouds = templateJSON["PUBLIC_CLOUD"];

      if (publicClouds != undefined) {
        if (!$.isArray(publicClouds)){
          publicClouds = [publicClouds];
        }

        $.each(publicClouds, function(){
          if(this["TYPE"] == "vcenter"){
            WizardFields.fillInput($("#vcenter_template_ref", context), this["VCENTER_TEMPLATE_REF"]);
            return false;
          }
        });
      }
    }

    if (templateJSON["HYPERVISOR"]) {
      $("input[name='hypervisor'][value='"+templateJSON["HYPERVISOR"]+"']", context).trigger("click")
      delete templateJSON["HYPERVISOR"];
    }

    if (templateJSON["USER_INPUTS"]) {

      if (templateJSON["USER_INPUTS"]["VCENTER_RESOURCE_POOL"]) {
        var rp = UserInputs.unmarshall(templateJSON["USER_INPUTS"]["VCENTER_RESOURCE_POOL"]);
        $('.modify_rp', context).val('list');
        $('.initial_rp', context).val(rp.initial);
        $('.available_rps', context).val(rp.params);

        delete templateJSON["USER_INPUTS"]["VCENTER_RESOURCE_POOL"];
      }
    }


    if (templateJSON["VCENTER_RESOURCE_POOL"]) {
      $('.modify_rp', context).val('fixed');
      WizardFields.fillInput($('.initial_rp', context), templateJSON["VCENTER_RESOURCE_POOL"]);

      delete templateJSON["VCENTER_RESOURCE_POOL"];
    }

    if(templateJSON["VCENTER_TEMPLATE_REF"]){
      WizardFields.fillInput($("#vcenter_template_ref", context), templateJSON["VCENTER_TEMPLATE_REF"]);
      delete templateJSON["VCENTER_TEMPLATE_REF"];
    }

    if(templateJSON["VCENTER_CCR_REF"]){
      WizardFields.fillInput($("#vcenter_ccr_ref", context), templateJSON["VCENTER_CCR_REF"]);
      delete templateJSON["VCENTER_CCR_REF"];
    }

    if(templateJSON["VCENTER_INSTANCE_ID"]){
      WizardFields.fillInput($("#vcenter_instance_id", context), templateJSON["VCENTER_INSTANCE_ID"]);
      delete templateJSON["VCENTER_INSTANCE_ID"];
    }

    CapacityCreate.fill($("div.capacityCreate", context), templateJSON);

    WizardFields.fill(context, templateJSON);
  }
Пример #12
0
  function generate_cardinality_selector(context, role_template, template_json) {
    context.off();
    var min_vms = (role_template.min_vms||1);
    var max_vms = (role_template.max_vms||20);

    context.html(
      '<fieldset>' +
        '<legend>' +
          Locale.tr("Cardinality") + ' ' +
          '<span class="provision_create_service_cost_div" hidden>'+
            '<span class="cost_value"></span>'+
            '<small> '+Locale.tr("COST")+' / ' + Locale.tr("HOUR") + '</small>'+
          '</span>'+
        '</legend>' +
          '<div class="row">'+
            '<div class="large-12 columns">'+
              '<label>'+
                '<span class="cardinality_value">'+role_template.cardinality+' </span>'+
                '<span>'+Locale.tr("VMs")+'</span>'+                
                '<div class="cardinality_slider_div">'+
                '</div>'+
                '<div class="cardinality_no_slider_div">'+
                  '<span class="">'+Locale.tr("The cardinality for this role cannot be changed")+'</span>'+
                '</div>'+
              '</label>'+
            '</div>'+
          '</div>'+
      '</fieldset>');

      var capacity = template_json.VMTEMPLATE.TEMPLATE;
      var cost = 0;

      var cpuCost    = capacity.CPU_COST;
      var memoryCost = capacity.MEMORY_COST;
      var diskCost   = capacity.DISK_COST;

      if (cpuCost == undefined){
        cpuCost = Config.onedConf.DEFAULT_COST.CPU_COST;
      }

      if (memoryCost == undefined){
        memoryCost = Config.onedConf.DEFAULT_COST.MEMORY_COST;
      }

      if (diskCost == undefined){
        diskCost = Config.onedConf.DEFAULT_COST.DISK_COST;
      }

      if ((cpuCost != 0 || memoryCost != 0 || diskCost != 0) && Config.isFeatureEnabled("showback")) {
        $(".provision_create_service_cost_div", context).show();

        if (capacity.CPU) {
          cost += capacity.CPU * cpuCost;
          $(".cost_value", context).data("CPU_COST", cpuCost);
        }

        if (capacity.MEMORY) {
          cost += capacity.MEMORY * memoryCost;
          $(".cost_value", context).data("MEMORY_COST", memoryCost);
        }

        if (diskCost != 0) {
          var template_disk = capacity.DISK;
          var disks = [];
          if ($.isArray(template_disk)) {
            disks = template_disk;
          } else if (!$.isEmptyObject(template_disk)) {
            disks = [template_disk];
          }

          $(".cost_value", context).data("DISK_COST", diskCost);

          $.each(disks, function(i,disk){
            if (disk.SIZE) {
              cost += diskCost * disk.SIZE;
            }

            if (disk.DISK_SNAPSHOT_TOTAL_SIZE) {
              cost += diskCost * disk.DISK_SNAPSHOT_TOTAL_SIZE;
            }
          });
        }

        $(".provision_create_service_cost_div", context).data("cost", cost)
        var cost_value = cost*parseInt(role_template.cardinality);
        $(".cost_value", context).html(cost_value.toFixed(2));
      } else {
        $(".provision_create_service_cost_div", context).hide();
      }

      if (max_vms > min_vms) {
        $( ".cardinality_slider_div", context).html(RangeSlider.html({
            min: min_vms,
            max: max_vms,
            initial: role_template.cardinality
          }));

        $( ".cardinality_slider_div", context).show();
        $( ".cardinality_no_slider_div", context).hide();

        $( ".cardinality_slider_div", context).on("input", '.uinput-slider', function() {
          $(".cardinality_value", context).html($(this).val());
          var cost_value = $(".provision_create_service_cost_div", context).data("cost")*$(this).val();
          $(".cost_value", context).html(cost_value.toFixed(2));
        });
      } else {
        $( ".cardinality_slider_div", context).hide();
        $( ".cardinality_no_slider_div", context).show();
      }
  }
Пример #13
0
        tab.on("click", "#provision_create_vm .provision_select_template .provision-pricing-table.only-one" , function(){
          var create_vm_context = $("#provision_create_vm");

          if ($(this).hasClass("selected")){
            //$(".provision_disk_selector", create_vm_context).html("");
            //$(".provision_network_selector", create_vm_context).html("");
            //$(".provision_capacity_selector", create_vm_context).html("");
//
            //$(".provision_accordion_template .selected_template").hide();
            //$(".provision_accordion_template .select_template").show();
          } else {
            var template_id = $(this).attr("opennebula_id");
            var template_json = $(this).data("opennebula");

            $(".provision_accordion_template .selected_template").show();
            $(".provision_accordion_template .select_template").hide();
            $(".provision_accordion_template .selected_template_name").html(template_json.VMTEMPLATE.NAME)
            if (template_json.VMTEMPLATE.TEMPLATE.LOGO) {
              $(".provision_accordion_template .selected_template_logo").html('<img  src="'+template_json.VMTEMPLATE.TEMPLATE.LOGO+'">');
            } else {
              $(".provision_accordion_template .selected_template_logo").html('<i class="fa fa-file-text-o fa-lg"/> ');
            }

            $(".provision_accordion_template a").first().trigger("click");

            generate_provision_capacity_accordion(
              $(".provision_capacity_selector", create_vm_context),
              template_json.VMTEMPLATE);

            provisionInvalidCapacity = function(input){
              if(!$(input).closest(".accordion-item").hasClass("is-active")){
                $("a", $(input).closest(".accordion-item")).click();
              }
            };

            $(".provision_capacity_selector input[required]", create_vm_context).attr("oninvalid", "provisionInvalidCapacity(this)");

            var disksContext = $(".provision_disk_selector", create_vm_context);
            if (Config.provision.create_vm.isEnabled("disk_resize")) {
              DisksResize.insert(template_json, disksContext);
            } else {
              disksContext.html("");
            }

            if (Config.provision.create_vm.isEnabled("network_select")) {
              NicsSection.insert(template_json, create_vm_context,
                {'securityGroups': Config.isFeatureEnabled("secgroups")});
            } else {
              $(".provision_network_selector", create_vm_context).html("");
            }

            if (template_json.VMTEMPLATE.TEMPLATE.USER_INPUTS) {
              UserInputs.vmTemplateInsert(
                  $(".provision_custom_attributes_selector", create_vm_context),
                  template_json,
                  {text_header: '<i class="fa fa-gears"></i> '+Locale.tr("Custom Attributes")});

            } else {
              $(".provision_custom_attributes_selector", create_vm_context).html("");
            }

            return false;
          }
        })
Пример #14
0
  function generate_provision_capacity_accordion(context, element) {

    var capacity = element.TEMPLATE;

    context.off();
    var memory_value;
    var memory_unit;

    if (capacity.MEMORY >= 1024){
      memory_value = (capacity.MEMORY/1024).toFixed(2);
      memory_unit = "GB";
    } else {
      memory_value = (capacity.MEMORY ? capacity.MEMORY : '-');
      memory_unit = "MB";
    }

    context.html(
      '<fieldset>' +
        '<legend>' +
          '<i class="fa fa-laptop fa-lg"></i> '+
          Locale.tr("Capacity") + ' ' +
          '<span class="provision_create_template_cost_div" hidden>' +
            '<span class="cost_value">0.00</span> '+
            '<small>'+Locale.tr("COST")+' / ' + Locale.tr("HOUR") + '</small>'+
          '</span>'+
        '</legend>' +
        CapacityInputs.html() +
      '</fieldset>');


    CapacityInputs.setup(context);
    CapacityInputs.fill(context, element);

    CapacityInputs.setCallback(context, function(values){
      $(".cpu_value", context).html(values.CPU);

      var memory_value;
      var memory_unit;

      if (values.MEMORY >= 1024){
        memory_value = (values.MEMORY/1024).toFixed(2);
        memory_unit = "GB";
      } else {
        memory_value = values.MEMORY;
        memory_unit = "MB";
      }

      $(".memory_value", context).html(memory_value);
      $(".memory_unit", context).html(memory_unit);
    });

    var cost = 0;

    var cpuCost    = capacity.CPU_COST;
    var memoryCost = capacity.MEMORY_COST;

    if (cpuCost == undefined){
      cpuCost = Config.onedConf.DEFAULT_COST.CPU_COST;
    }

    if (memoryCost == undefined){
      memoryCost = Config.onedConf.DEFAULT_COST.MEMORY_COST;
    }

    var _redoCost = function(values){
      var cost = 0;

      if (values.CPU != undefined){
        cost += cpuCost * values.CPU;
      }

      if (values.MEMORY != undefined){
        cost += memoryCost * values.MEMORY;
      }

      $(".cost_value", context).html(cost.toFixed(2));
    };

    if ((cpuCost != 0 || memoryCost != 0) && Config.isFeatureEnabled("showback")) {
      $(".provision_create_template_cost_div").show();

      _redoCost(capacity);

      if (Config.provision.create_vm.isEnabled("capacity_select")){
        CapacityInputs.setCallback(context, _redoCost);
      }
    } else {
      $(".provision_create_template_cost_div").hide();
    }
  }