From 5e231696890334871be82d92c966f88e0ddd5a2d Mon Sep 17 00:00:00 2001 From: juanmont Date: Wed, 9 Nov 2016 20:12:23 +0100 Subject: [PATCH] merge with origin/master --- src/cloud/ec2/lib/EC2QueryServer.rb | 2 +- src/datastore_mad/remotes/xpath.rb | 8 +-- src/onedb/fsck.rb | 2 +- src/sunstone/etc/sunstone-views/admin.yaml | 1 - src/sunstone/etc/sunstone-views/cloud.yaml | 1 - .../etc/sunstone-views/groupadmin.yaml | 1 - src/sunstone/public/app/sunstone-config.js | 5 -- .../public/app/tabs/vms-tab/panels/info.js | 4 +- .../app/tabs/vms-tab/panels/info/html.hbs | 7 --- .../tabs/vms-tab/utils/datatable-common.js | 1 - src/sunstone/views/index.erb | 2 - src/sunstone/views/login.erb | 2 - src/tm_mad/common/prepostmigrate | 4 +- src/vmm_mad/remotes/kvm/poll | 49 +++++++++++++++++++ src/vmm_mad/remotes/vcenter/vcenter_driver.rb | 3 +- src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb | 13 ----- src/vnm_mad/remotes/OpenNebulaNetwork.conf | 4 -- src/vnm_mad/remotes/lib/vlan.rb | 28 ----------- src/vnm_mad/remotes/lib/vnmmad.rb | 2 +- src/vnm_mad/remotes/vxlan/vxlan_driver.rb | 13 ----- 20 files changed, 58 insertions(+), 94 deletions(-) diff --git a/src/cloud/ec2/lib/EC2QueryServer.rb b/src/cloud/ec2/lib/EC2QueryServer.rb index 12d8441b10..7dc310fd96 100644 --- a/src/cloud/ec2/lib/EC2QueryServer.rb +++ b/src/cloud/ec2/lib/EC2QueryServer.rb @@ -241,7 +241,7 @@ class EC2QueryServer < CloudServer private def render_launch_time(vm) - return "#{Time.at(vm["STIME"].to_i).utc.xmlschema}" + return "#{Time.at(vm["STIME"].to_i).xmlschema}" end end diff --git a/src/datastore_mad/remotes/xpath.rb b/src/datastore_mad/remotes/xpath.rb index ce57ddb651..ec424f0e85 100755 --- a/src/datastore_mad/remotes/xpath.rb +++ b/src/datastore_mad/remotes/xpath.rb @@ -64,13 +64,7 @@ ARGV.each do |xpath| values << ar.join(' ') else element = xml.elements[xpath.dup] - if !element.nil? - if element.class.method_defined?(:text) - values << element.text - else - values << element.to_s - end - end + values << element.text.to_s if !element.nil? end values << "\0" end diff --git a/src/onedb/fsck.rb b/src/onedb/fsck.rb index 9f52c559ab..3862d0d9f8 100644 --- a/src/onedb/fsck.rb +++ b/src/onedb/fsck.rb @@ -2637,7 +2637,7 @@ EOT # Params: # +disk+:: Nokogiri::XML::Node describing a disk used by a template def get_image_from_name(disk) - name = disk.at_xpath("IMAGE") && disk.at_xpath("IMAGE").content + name = disk.at_xpath("IMAGE").content # always defined uid = disk.at_xpath("IMAGE_UID") uname = disk.at_xpath("IMAGE_UNAME") diff --git a/src/sunstone/etc/sunstone-views/admin.yaml b/src/sunstone/etc/sunstone-views/admin.yaml index c7841aa65a..fbb43d0725 100644 --- a/src/sunstone/etc/sunstone-views/admin.yaml +++ b/src/sunstone/etc/sunstone-views/admin.yaml @@ -1,6 +1,5 @@ small_logo: images/opennebula-5.0.png provision_logo: images/opennebula-5.0.png -confirm_vms: true enabled_tabs: - dashboard-tab - instances-top-tab diff --git a/src/sunstone/etc/sunstone-views/cloud.yaml b/src/sunstone/etc/sunstone-views/cloud.yaml index 7201d6b9e9..00c5133b29 100644 --- a/src/sunstone/etc/sunstone-views/cloud.yaml +++ b/src/sunstone/etc/sunstone-views/cloud.yaml @@ -1,5 +1,4 @@ provision_logo: images/opennebula-5.0.png -confirm_vms: true enabled_tabs: - provision-tab - settings-tab diff --git a/src/sunstone/etc/sunstone-views/groupadmin.yaml b/src/sunstone/etc/sunstone-views/groupadmin.yaml index 144207051f..c829ef12bc 100644 --- a/src/sunstone/etc/sunstone-views/groupadmin.yaml +++ b/src/sunstone/etc/sunstone-views/groupadmin.yaml @@ -1,6 +1,5 @@ small_logo: images/opennebula-5.0.png provision_logo: images/opennebula-5.0.png -confirm_vms: true enabled_tabs: - dashboard-tab - instances-top-tab diff --git a/src/sunstone/public/app/sunstone-config.js b/src/sunstone/public/app/sunstone-config.js index 6666a9a9e9..d1c02c1f3e 100644 --- a/src/sunstone/public/app/sunstone-config.js +++ b/src/sunstone/public/app/sunstone-config.js @@ -146,15 +146,10 @@ define(function(require) { 'vmLogos': (_config['vm_logos']), 'enabledTabs': _config['view']['enabled_tabs'], 'onedConf': _config['oned_conf'], - 'confirmVMActions': _config['view']['confirm_vms'], "allTabs": function() { return Object.keys(_config['view']['tabs']); } - - /*"isConfirmVmsActionsEnable": function() { - Console.Log(_config['view']['confirm_vms']); - }*/ } return Config; diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/info.js b/src/sunstone/public/app/tabs/vms-tab/panels/info.js index 2784b5597a..a7b334a711 100644 --- a/src/sunstone/public/app/tabs/vms-tab/panels/info.js +++ b/src/sunstone/public/app/tabs/vms-tab/panels/info.js @@ -77,8 +77,6 @@ define(function(require) { var hostnameHTML = OpenNebula.VM.hostnameStrLink(this.element); var vrouterHTML = '--'; - var IP = OpenNebula.VM.ipsStr(this.element); - if (this.element.TEMPLATE.VROUTER_ID != undefined){ vrouterHTML = Navigation.link( OpenNebula.VirtualRouter.getName(this.element.TEMPLATE.VROUTER_ID), @@ -124,7 +122,6 @@ define(function(require) { 'hostnameHTML': hostnameHTML, 'prettyStartTime': prettyStartTime, 'deployId': deployId, - 'IP': IP, 'resched': resched, 'permissionsTableHTML': permissionsTableHTML, 'templateTableHTML': templateTableHTML, @@ -136,6 +133,7 @@ define(function(require) { function _setup(context) { RenameTr.setup(TAB_ID, RESOURCE, this.element.ID, context); PermissionsTable.setup(TAB_ID, RESOURCE, this.element, context); + // Get rid of the unwanted (for show) SCHED_* keys var that = this; var strippedTemplate = {}; diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs b/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs index e19be83db1..10bae54700 100644 --- a/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs +++ b/src/sunstone/public/app/tabs/vms-tab/panels/info/html.hbs @@ -43,13 +43,6 @@ {{{hostnameHTML}}} - - - {{tr "IP"}} - {{{IP}}} - - - {{tr "Start time"}} {{prettyStartTime}} diff --git a/src/sunstone/public/app/tabs/vms-tab/utils/datatable-common.js b/src/sunstone/public/app/tabs/vms-tab/utils/datatable-common.js index 657edb0649..6e8c515d09 100644 --- a/src/sunstone/public/app/tabs/vms-tab/utils/datatable-common.js +++ b/src/sunstone/public/app/tabs/vms-tab/utils/datatable-common.js @@ -130,7 +130,6 @@ define(function(require) { ]; } - function _emptyElementArray(vmId) { return [ ' - OpenNebula Sunstone: Cloud Operations Center @@ -60,7 +59,6 @@ <% else %> - <% end %> diff --git a/src/sunstone/views/login.erb b/src/sunstone/views/login.erb index 2c4d711d2e..1aba62d546 100644 --- a/src/sunstone/views/login.erb +++ b/src/sunstone/views/login.erb @@ -1,9 +1,7 @@ - - OpenNebula Sunstone Login diff --git a/src/tm_mad/common/prepostmigrate b/src/tm_mad/common/prepostmigrate index 44a1a18463..3948c77672 100755 --- a/src/tm_mad/common/prepostmigrate +++ b/src/tm_mad/common/prepostmigrate @@ -25,8 +25,8 @@ # - template is the template of the VM in XML and base64 encoded # - system_ds_mad flag if called by other SYSTEM_DS TM_MAD -SRC_HOST="$1" -DST_HOST="$2" +SRC="$1" +DST="$2" DST_PATH="$3" VM_ID="$4" DS_ID="$5" diff --git a/src/vmm_mad/remotes/kvm/poll b/src/vmm_mad/remotes/kvm/poll index ee56cdbda6..3c7222da79 100755 --- a/src/vmm_mad/remotes/kvm/poll +++ b/src/vmm_mad/remotes/kvm/poll @@ -49,6 +49,7 @@ module KVM :list => 'virsh --connect LIBVIRT_URI --readonly list', :dumpxml => 'virsh --connect LIBVIRT_URI --readonly dumpxml', :domifstat => 'virsh --connect LIBVIRT_URI --readonly domifstat', + :domblkstat => 'virsh --connect LIBVIRT_URI --readonly domblkstat', :top => 'top -b -d2 -n 2 -p ', 'LIBVIRT_URI' => 'qemu:///system' } @@ -154,6 +155,8 @@ module KVM vm[:name] = uuid end + values.merge!(get_diskio_statistics(name, xml)) + vms_info[vm[:name]] = values end @@ -322,6 +325,52 @@ module KVM values end + def self.get_disk_names(vmid, text = nil) + text = dump_xml(vmid) if !text + + doc=REXML::Document.new(text) + disks = [] + doc.elements.each('domain/devices/disk/target') do |ele| + disks << ele.attributes["dev"] + end + + disks + end + + def self.get_diskio_statistics(vmid, text = nil) + disks=get_disk_names(vmid, text) + + if disks && !disks.empty? + values={} + values[:diskrdbytes]=0 + values[:diskwrbytes]=0 + values[:diskrdiops]=0 + values[:diskwriops]=0 + + disks.each do |disk| + text=`#{virsh(:domblkstat)} #{vmid} #{disk}` + + text.each_line do |line| + columns=line.split(/\s+/) + case columns[1] + when 'rd_bytes' + values[:diskrdbytes]+=columns[2].to_i + when 'wr_bytes' + values[:diskwrbytes]+=columns[2].to_i + when 'rd_req' + values[:diskrdiops]+=columns[2].to_i + when 'wr_req' + values[:diskwriops]+=columns[2].to_i + end + end + end + + values + else + {} + end + end + # Translate libvirt state to Opennebula monitor state # @param state [String] libvirt state # @return [String] OpenNebula state diff --git a/src/vmm_mad/remotes/vcenter/vcenter_driver.rb b/src/vmm_mad/remotes/vcenter/vcenter_driver.rb index 9f259d85f4..d21d3d9a7e 100644 --- a/src/vmm_mad/remotes/vcenter/vcenter_driver.rb +++ b/src/vmm_mad/remotes/vcenter/vcenter_driver.rb @@ -2589,7 +2589,8 @@ private vm.config.hardware.device.each{ |dv| if is_nic?(dv) nics.each{|nic| - if nic.elements["MAC"].text == dv.macAddress + if nic.elements["MAC"].text == dv.macAddress and + nic.elements["BRIDGE"].text == dv.deviceInfo.summary nics.delete(nic) end } diff --git a/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb b/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb index 691ade0310..282d6afd0e 100644 --- a/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb +++ b/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb @@ -51,17 +51,4 @@ class VLANTagDriver < VNMMAD::VLANDriver OpenNebula.exec_and_log("#{command(:ip)} link set #{@nic[:vlan_dev]} up") end - - def get_interface_vlan(name) - text = %x(#{command(:ip)} -d link show #{name}) - return nil if $?.exitstatus != 0 - - text.each_line do |line| - m = line.match(/vlan protocol 802.1Q id (\d+)/) - - return m[1] if m - end - - nil - end end diff --git a/src/vnm_mad/remotes/OpenNebulaNetwork.conf b/src/vnm_mad/remotes/OpenNebulaNetwork.conf index 16ae01a7eb..9c58fb556a 100644 --- a/src/vnm_mad/remotes/OpenNebulaNetwork.conf +++ b/src/vnm_mad/remotes/OpenNebulaNetwork.conf @@ -14,10 +14,6 @@ # limitations under the License. # #--------------------------------------------------------------------------- # -# Set to true to check that no other vlans are connected to the bridge. -# Works with 802.1Q and VXLAN. -:validate_vlan_id: false - ################################################################################ # Open vSwitch Options ################################################################################ diff --git a/src/vnm_mad/remotes/lib/vlan.rb b/src/vnm_mad/remotes/lib/vlan.rb index c685cbd5fd..578ef10814 100644 --- a/src/vnm_mad/remotes/lib/vlan.rb +++ b/src/vnm_mad/remotes/lib/vlan.rb @@ -46,9 +46,6 @@ module VNMMAD # Create the bridge. create_bridge - # Check that no other vlans are connected to this bridge - validate_vlan_id - # Return if vlan device is already in the bridge. next if @bridges[@nic[:bridge]].include? @nic[:vlan_dev] @@ -94,9 +91,6 @@ module VNMMAD # Get the name of the vlan device. get_vlan_dev_name - # Return if the bridge doesn't exist because it was already deleted (handles last vm with multiple nics on the same vlan) - next if !@bridges.include? @nic[:bridge] - # Return if the vlan device is not the only left device in the bridge. next if @bridges[@nic[:bridge]].length > 1 or !@bridges[@nic[:bridge]].include? @nic[:vlan_dev] @@ -155,27 +149,5 @@ module VNMMAD bridges end - - def get_interface_vlan(name) - nil - end - - def validate_vlan_id - @bridges[@nic[:bridge]].each do |interface| - vlan = get_interface_vlan(interface) - - if vlan && vlan.to_s != @nic[:vlan_id] - OpenNebula.log_error("The interface #{interface} has "\ - "vlan_id = #{vlan} but the network is configured "\ - "with vlan_id = #{@nic[:vlan_id]}") - - msg = "Interface with an incorrect vlan_id is already in "\ - "the bridge" - OpenNebula.error_message(msg) - - exit(-1) - end - end - end end end diff --git a/src/vnm_mad/remotes/lib/vnmmad.rb b/src/vnm_mad/remotes/lib/vnmmad.rb index 4bf39119df..8d965bcdf9 100644 --- a/src/vnm_mad/remotes/lib/vnmmad.rb +++ b/src/vnm_mad/remotes/lib/vnmmad.rb @@ -32,7 +32,7 @@ require 'sg_driver' require 'vlan' require 'scripts_common' -Dir[File.expand_path('vnmmad-load.d', File.dirname(__FILE__)) + "/*.rb"].each{ |f| require f } +Dir["vnmmad-load.d/*.rb"].each{ |f| require f } include OpenNebula diff --git a/src/vnm_mad/remotes/vxlan/vxlan_driver.rb b/src/vnm_mad/remotes/vxlan/vxlan_driver.rb index 509c7c24e1..3ca84b1ee7 100644 --- a/src/vnm_mad/remotes/vxlan/vxlan_driver.rb +++ b/src/vnm_mad/remotes/vxlan/vxlan_driver.rb @@ -54,17 +54,4 @@ class VXLANDriver < VNMMAD::VLANDriver OpenNebula.exec_and_log("#{command(:ip)} link set #{@nic[:vlan_dev]} up") end - - def get_interface_vlan(name) - text = %x(#{command(:ip)} -d link show #{name}) - return nil if $?.exitstatus != 0 - - text.each_line do |line| - m = line.match(/^\s*vxlan id (\d+)/) - - return m[1] if m - end - - nil - end end