diff options
author | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-07-16 14:38:26 +0100 |
---|---|---|
committer | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-07-19 08:07:23 +0000 |
commit | d3ee90f9dd7335a3e13d1c4d71cad2b3b5c825fd (patch) | |
tree | fbb564084361fd37748efcdc28345d97759c3736 /yardstick/orchestrator | |
parent | 3eb7c80aa614456b05e08651a55f7450e6864c79 (diff) |
Kubernetes NodePort must have 'name' if multiple created
In Kubernetes context, service NodePort can contain more than one port
defined. Actually, by default port SSH (22) is always created. If more
than one port is defined in the service template, 'name' parameter is
mandatory.
Names must be lowercase, containing alphanumeric characters or '-'.
Verification regex used by Kubernetes: [a-z0-9]([-a-z0-9]*[a-z0-9])?
JIRA: YARDSTICK-1324
Change-Id: I82791761d8eae24196c2f16aee9900af28d44c57
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Diffstat (limited to 'yardstick/orchestrator')
-rw-r--r-- | yardstick/orchestrator/kubernetes.py | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/yardstick/orchestrator/kubernetes.py b/yardstick/orchestrator/kubernetes.py index 98832908c..1da177945 100644 --- a/yardstick/orchestrator/kubernetes.py +++ b/yardstick/orchestrator/kubernetes.py @@ -8,6 +8,7 @@ ############################################################################## import copy +import re from oslo_serialization import jsonutils @@ -234,6 +235,9 @@ class ReplicationControllerObject(object): class ServiceNodePortObject(object): + MANDATORY_PARAMETERS = {'port', 'name'} + NAME_REGEX = re.compile(r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$') + def __init__(self, name, **kwargs): """Service kind "NodePort" object @@ -251,19 +255,27 @@ class ServiceNodePortObject(object): } } - self._add_port(22, protocol='TCP') + self._add_port(22, 'ssh', protocol='TCP') node_ports = copy.deepcopy(kwargs.get('node_ports', [])) for port in node_ports: + if not self.MANDATORY_PARAMETERS.issubset(port.keys()): + missing_parameters = ', '.join( + str(param) for param in + (self.MANDATORY_PARAMETERS - set(port.keys()))) + raise exceptions.KubernetesServiceObjectDefinitionError( + missing_parameters=missing_parameters) port_number = port.pop('port') - self._add_port(port_number, **port) + name = port.pop('name') + if not self.NAME_REGEX.match(name): + raise exceptions.KubernetesServiceObjectNameError(name=name) + self._add_port(port_number, name, **port) - def _add_port(self, port, protocol=None, name=None, targetPort=None, + def _add_port(self, port, name, protocol=None, targetPort=None, nodePort=None): - _port = {'port': port} + _port = {'port': port, + 'name': name} if protocol: _port['protocol'] = protocol - if name: - _port['name'] = name if targetPort: _port['targetPort'] = targetPort if nodePort: |