Configure n_rxq DPDK port option when adding the port
[yardstick.git] / yardstick / benchmark / contexts / standalone / ovs_dpdk.py
index e6a6f99..469f799 100644 (file)
@@ -20,11 +20,12 @@ import re
 import time
 
 from yardstick import ssh
-from yardstick.network_services.utils import get_nsb_option
-from yardstick.benchmark.contexts.base import Context
+from yardstick.benchmark import contexts
+from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
 from yardstick.common import exceptions
 from yardstick.network_services import utils
+from yardstick.network_services.utils import get_nsb_option
 
 
 LOG = logging.getLogger(__name__)
@@ -32,12 +33,12 @@ LOG = logging.getLogger(__name__)
 MAIN_BRIDGE = 'br0'
 
 
-class OvsDpdkContext(Context):
+class OvsDpdkContext(base.Context):
     """ This class handles OVS standalone nodes - VM running on Non-Managed NFVi
     Configuration: ovs_dpdk
     """
 
-    __context_type__ = "StandaloneOvsDpdk"
+    __context_type__ = contexts.CONTEXT_STANDALONEOVSDPDK
 
     SUPPORTED_OVS_TO_DPDK_MAP = {
         '2.6.0': '16.07.1',
@@ -165,8 +166,7 @@ class OvsDpdkContext(Context):
         version = self.ovs_properties.get('version', {})
         ovs_ver = [int(x) for x in version.get('ovs', self.DEFAULT_OVS).split('.')]
         ovs_add_port = ('ovs-vsctl add-port {br} {port} -- '
-                        'set Interface {port} type={type_}{dpdk_args}')
-        ovs_add_queue = 'ovs-vsctl set Interface {port} options:n_rxq={queue}'
+                        'set Interface {port} type={type_}{dpdk_args}{dpdk_rxq}')
         chmod_vpath = 'chmod 0777 {0}/var/run/openvswitch/dpdkvhostuser*'
 
         cmd_list = [
@@ -175,6 +175,8 @@ class OvsDpdkContext(Context):
             'ovs-vsctl add-br {0} -- set bridge {0} datapath_type=netdev'.
             format(MAIN_BRIDGE)
         ]
+        dpdk_rxq = " options:n_rxq={queue}".format(
+            queue=self.ovs_properties.get("queues", 1))
 
         ordered_network = collections.OrderedDict(self.networks)
         for index, vnf in enumerate(ordered_network.values()):
@@ -182,10 +184,7 @@ class OvsDpdkContext(Context):
                 dpdk_args = " options:dpdk-devargs=%s" % vnf.get("phy_port")
             dpdk_list.append(ovs_add_port.format(
                 br=MAIN_BRIDGE, port='dpdk%s' % vnf.get("port_num", 0),
-                type_='dpdk', dpdk_args=dpdk_args))
-            dpdk_list.append(ovs_add_queue.format(
-                port='dpdk%s' % vnf.get("port_num", 0),
-                queue=self.ovs_properties.get("queues", 1)))
+                type_='dpdk', dpdk_args=dpdk_args, dpdk_rxq=dpdk_rxq))
 
         # Sorting the array to make sure we execute dpdk0... in the order
         list.sort(dpdk_list)
@@ -195,7 +194,7 @@ class OvsDpdkContext(Context):
         for index, _ in enumerate(ordered_network):
             cmd_list.append(ovs_add_port.format(
                 br=MAIN_BRIDGE, port='dpdkvhostuser%s' % index,
-                type_='dpdkvhostuser', dpdk_args=""))
+                type_='dpdkvhostuser', dpdk_args="", dpdk_rxq=""))
 
         ovs_flow = ("ovs-ofctl add-flow {0} in_port=%s,action=output:%s".
                     format(MAIN_BRIDGE))
@@ -393,13 +392,14 @@ class OvsDpdkContext(Context):
         for index, (key, vnf) in enumerate(collections.OrderedDict(
                 self.servers).items()):
             cfg = '/tmp/vm_ovs_%d.xml' % index
-            vm_name = "vm_%d" % index
+            vm_name = "vm-%d" % index
+            cdrom_img = "/var/lib/libvirt/images/cdrom-%d.img" % index
 
             # 1. Check and delete VM if already exists
             model.Libvirt.check_if_vm_exists_and_delete(vm_name,
                                                         self.connection)
             xml_str, mac = model.Libvirt.build_vm_xml(
-                self.connection, self.vm_flavor, vm_name, index)
+                self.connection, self.vm_flavor, vm_name, index, cdrom_img)
 
             # 2: Cleanup already available VMs
             for vfs in [vfs for vfs_name, vfs in vnf["network_ports"].items()
@@ -410,16 +410,25 @@ class OvsDpdkContext(Context):
             model.Libvirt.write_file(cfg, xml_str)
             self.connection.put(cfg, cfg)
 
+            node = self.vnf_node.generate_vnf_instance(self.vm_flavor,
+                                                       self.networks,
+                                                       self.host_mgmt.get('ip'),
+                                                       key, vnf, mac)
+            # Generate public/private keys if password or private key file is not provided
+            node = model.StandaloneContextHelper.check_update_key(self.connection,
+                                                                  node,
+                                                                  vm_name,
+                                                                  self.name,
+                                                                  cdrom_img,
+                                                                  mac)
+
+            # store vnf node details
+            nodes.append(node)
+
             # NOTE: launch through libvirt
             LOG.info("virsh create ...")
             model.Libvirt.virsh_create_vm(self.connection, cfg)
 
             self.vm_names.append(vm_name)
 
-            # build vnf node details
-            nodes.append(self.vnf_node.generate_vnf_instance(self.vm_flavor,
-                                                             self.networks,
-                                                             self.host_mgmt.get('ip'),
-                                                             key, vnf, mac))
-
         return nodes