diff options
author | Ross Brattain <ross.b.brattain@intel.com> | 2017-10-17 14:30:37 -0700 |
---|---|---|
committer | Ross Brattain <ross.b.brattain@intel.com> | 2017-12-11 13:00:13 -0800 |
commit | ec6a90d449f8b1ab2b17083188ec65f75ab7818b (patch) | |
tree | 7a80aae3e5d4b8a0f069ea0caab912d05bbebff6 /yardstick/benchmark/contexts/model.py | |
parent | 2085fd018074c2687ade484b9d7087173ea4f1c7 (diff) |
heat: allow overriding Heat/Neutron private IP for DPDK tests
For some L2/L3 DPDK testcases we need to use a custom
IP address space different from what Heat provides.
These testcases require port_security_enabled = False so
Neutron should allow for unrestricted L2 traffic.
This will work because we bind the ports to DPDK and thus
don't need DHCP.
vnf_0:
floating_ip: true
placement: "pgrp1"
network_ports:
mgmt:
- mgmt
uplink_0:
- xe0:
local_ip: 10.44.0.20
netmask: 255.255.255.0
downlink_0:
- xe1:
local_ip: 10.44.0.30
netmask: 255.255.255.0
Also fixup flake8 errors in unittests
Change-Id: Id29dfffa692f16fb1f526d208db43e476e2f7830
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Diffstat (limited to 'yardstick/benchmark/contexts/model.py')
-rw-r--r-- | yardstick/benchmark/contexts/model.py | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/yardstick/benchmark/contexts/model.py b/yardstick/benchmark/contexts/model.py index d3c03e100..ae56066ee 100644 --- a/yardstick/benchmark/contexts/model.py +++ b/yardstick/benchmark/contexts/model.py @@ -14,6 +14,8 @@ from __future__ import absolute_import import six import logging + +from collections import Mapping from six.moves import range @@ -241,6 +243,26 @@ class Server(Object): # pragma: no cover Server.list.append(self) + def override_ip(self, network_name, port): + def find_port_overrides(): + for p in ports: + # p can be string or dict + # we can't just use p[port['port'] in case p is a string + # and port['port'] is an int? + if isinstance(p, Mapping): + g = p.get(port['port']) + # filter out empty dicts + if g: + yield g + + ports = self.network_ports.get(network_name, []) + intf = self.interfaces[port['port']] + for override in find_port_overrides(): + intf['local_ip'] = override.get('local_ip', intf['local_ip']) + intf['netmask'] = override.get('netmask', intf['netmask']) + # only use the first value + break + @property def image(self): """returns a server's image name""" @@ -270,9 +292,13 @@ class Server(Object): # pragma: no cover continue else: if isinstance(ports, six.string_types): - if ports.startswith('-'): - LOG.warning("possible YAML error, port name starts with - '%s", ports) - ports = [ports] + # because strings are iterable we have to check specifically + raise SyntaxError("network_port must be a list '{}'".format(ports)) + # convert port subdicts into their just port name + # port subdicts are used to override Heat IP address, + # but we just need the port name + # we allow duplicates here and let Heat raise the error + ports = [next(iter(p)) if isinstance(p, dict) else p for p in ports] # otherwise add a port for every network with port name as network name else: ports = [network.name] |