import re
import time
-import compute
-from log import LOG
-
from glanceclient.v2 import client as glanceclient
from neutronclient.neutron import client as neutronclient
from novaclient.client import Client
+import compute
+from log import LOG
class StageClientException(Exception):
pass
phys1=network['provider:physical_network'],
phys2=physical_network))
- LOG.info('Reusing existing network: ' + name)
+ LOG.info('Reusing existing network: %s', name)
network['is_reuse'] = True
return network
LOG.info('Created network: %s.', name)
return network
- def _create_port(self, net):
+ def _create_port(self, net, vnic_type='normal'):
body = {
"port": {
'network_id': net['id'],
- 'binding:vnic_type': 'direct' if self.config.sriov else 'normal'
+ 'binding:vnic_type': vnic_type
}
}
port = self.neutron.create_port(body)
else:
LOG.error('Unable to delete flavor: %s', self.config.flavor_type)
- def get_config_file(self, chain_index, src_mac, dst_mac):
+ def get_config_file(self, chain_index, src_mac, dst_mac, intf_mac1, intf_mac2):
boot_script_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),
'nfvbenchvm/', self.nfvbenchvm_config_name)
vm_config = {
'forwarder': self.config.vm_forwarder,
+ 'intf_mac1': intf_mac1,
+ 'intf_mac2': intf_mac2,
'tg_gateway1_ip': self.config.traffic_generator.tg_gateway_ip_addrs[0],
'tg_gateway2_ip': self.config.traffic_generator.tg_gateway_ip_addrs[1],
'tg_net1': self.config.traffic_generator.ip_addrs[0],
for net in self.nets:
for port in self.ports[net['id']]:
if port['device_id'] in vm_ids:
- self.neutron.update_port(port['id'], {
- 'port': {
- 'security_groups': [],
- 'port_security_enabled': False,
- }
- })
- LOG.info('Security disabled on port %s', port['id'])
+ try:
+ self.neutron.update_port(port['id'], {
+ 'port': {
+ 'security_groups': [],
+ 'port_security_enabled': False,
+ }
+ })
+ LOG.info('Security disabled on port %s', port['id'])
+ except Exception:
+ LOG.warning('Failed to disable port security on port %s, ignoring...',
+ port['id'])
+
def get_loop_vm_hostnames(self):
return [getattr(vm, 'OS-EXT-SRV-ATTR:hypervisor_hostname') for vm in self.vms]
Creates two networks and spawn a VM which act as a loop VM connected
with the two networks.
"""
- self._setup_openstack_clients()
+ if self.cred:
+ self._setup_openstack_clients()
def dispose(self, only_vm=False):
"""
super(EXTStageClient, self).setup()
# Lookup two existing networks
- for net_name in [self.config.external_networks.left, self.config.external_networks.right]:
- net = self._lookup_network(net_name)
- if net:
- self.nets.append(net)
- else:
- raise StageClientException('Existing network {} cannot be found.'.format(net_name))
+ if self.cred:
+ for net_name in [self.config.external_networks.left,
+ self.config.external_networks.right]:
+ net = self._lookup_network(net_name)
+ if net:
+ self.nets.append(net)
+ else:
+ raise StageClientException('Existing network {} cannot be found.'.
+ format(net_name))
class PVPStageClient(BasicStageClient):
if reusable_vm:
self.vms.append(reusable_vm)
else:
+ vnic_type = 'direct' if self.config.sriov else 'normal'
+ ports = [self._create_port(net, vnic_type) for net in self.nets]
config_file = self.get_config_file(chain_index,
self.config.generator_config.src_device.mac,
- self.config.generator_config.dst_device.mac)
-
- ports = [self._create_port(net) for net in self.nets]
+ self.config.generator_config.dst_device.mac,
+ ports[0]['mac_address'],
+ ports[1]['mac_address'])
self.created_ports.extend(ports)
self.vms.append(self._create_server(name, ports, az, config_file))
self._ensure_vms_active()
if reusable_vm0 and reusable_vm1:
self.vms.extend([reusable_vm0, reusable_vm1])
else:
- vm0_port_net0 = self._create_port(vm0_nets[0])
- vm0_port_net2 = self._create_port(vm0_nets[1])
+ edge_vnic_type = 'direct' if self.config.sriov else 'normal'
+ middle_vnic_type = 'direct' \
+ if self.config.sriov and self.config.use_sriov_middle_net \
+ else 'normal'
+ vm0_port_net0 = self._create_port(vm0_nets[0], edge_vnic_type)
+ vm0_port_net2 = self._create_port(vm0_nets[1], middle_vnic_type)
- vm1_port_net2 = self._create_port(vm1_nets[1])
- vm1_port_net1 = self._create_port(vm1_nets[0])
+ vm1_port_net2 = self._create_port(vm1_nets[1], middle_vnic_type)
+ vm1_port_net1 = self._create_port(vm1_nets[0], edge_vnic_type)
self.created_ports.extend([vm0_port_net0,
vm0_port_net2,
# TG0 (net0) -> VM0 (net2) -> VM1 (net2) -> TG1 (net1)
config_file0 = self.get_config_file(chain_index,
self.config.generator_config.src_device.mac,
- vm1_port_net2['mac_address'])
+ vm1_port_net2['mac_address'],
+ vm0_port_net0['mac_address'],
+ vm0_port_net2['mac_address'])
config_file1 = self.get_config_file(chain_index,
vm0_port_net2['mac_address'],
- self.config.generator_config.dst_device.mac)
+ self.config.generator_config.dst_device.mac,
+ vm1_port_net2['mac_address'],
+ vm1_port_net1['mac_address'])
self.vms.append(self._create_server(name0,
[vm0_port_net0, vm0_port_net2],