Files
python-oneviewclient/oneview_client/utils.py
Andre abd32cbdfe Add validation for connections
This patch its about to add all connections validation
for flat and neutron network interface and if the user
its using the OneView ml2 Driver.

Change-Id: I6c47f6b09d22b530da8eeac189ff54f603850723
2017-03-30 14:11:40 -03:00

128 lines
3.8 KiB
Python

# (c) Copyright 2015 Hewlett Packard Enterprise Development LP
# Copyright 2015 Universidade Federal de Campina Grande
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
import six
from oslo_serialization import jsonutils
from oneview_client import exceptions
UUID_PATTERN = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-" +\
"[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
def _is_uuid_valid(uuid):
if re.match(UUID_PATTERN, uuid):
return True
return False
def get_uuid_from_uri(uri):
if uri:
return uri.split("/")[-1]
def get_uri_from_uuid(resource_prefix, uuid):
if uuid and _is_uuid_valid(uuid):
return str(resource_prefix) + str(uuid)
def get_oneview_connection_ports(ports):
llc_pxe_ports = get_ports_with_llc_and_pxe_enabled(ports)
bootable_ports = get_bootable_ports(llc_pxe_ports)
return bootable_ports
def get_ports_with_llc_and_pxe_enabled(ports):
llc_pxe_ports = [port for port in ports if (
port.local_link_connection and port.pxe_enabled)
]
if not llc_pxe_ports:
raise exceptions.OneViewInconsistentResource(
"There must exist at least one port with local link "
"connection information and pxe_enabled = True at the node."
)
return llc_pxe_ports
def get_bootable_ports(ports, bootable='true'):
bootable_ports = []
for port in ports:
switch_info = get_switch_info(port)
if switch_info and switch_info.get('bootable').lower() == bootable:
bootable_ports.append(port)
if not bootable_ports:
raise exceptions.OneViewInconsistentResource(
"In the local_link_connection of the port must exist "
"the switch_info with bootable = true"
)
return bootable_ports
def get_switch_info(port):
switch_info = port.local_link_connection.get('switch_info')
if switch_info and isinstance(switch_info, six.text_type):
switch_info = jsonutils.loads(switch_info)
return switch_info
def get_all_macs(server_hardware):
macs = []
device_slots = server_hardware.port_map.get('deviceSlots')
physical_ports = get_physical_ports(device_slots)
virtual_ports = get_virtual_ports(physical_ports)
macs.extend(get_physical_macs(physical_ports))
macs.extend(get_virtual_macs(virtual_ports))
return set(macs)
def get_physical_ports(device_slots):
physical_ports = []
for device_slot in device_slots:
if device_slot and device_slot.get('physicalPorts'):
physical_ports.extend(device_slot.get('physicalPorts'))
return physical_ports
def get_virtual_ports(physical_ports):
virtual_ports = []
for physical_port in physical_ports:
if physical_port and physical_port.get('virtualPorts'):
virtual_ports.extend(physical_port.get('virtualPorts'))
return virtual_ports
def get_physical_macs(physical_ports):
physical_macs = []
for physical_port in physical_ports:
if physical_port and physical_port.get('mac'):
physical_macs.append(physical_port.get('mac').lower())
return physical_macs
def get_virtual_macs(virtual_ports):
virtual_macs = []
for virtual_port in virtual_ports:
if virtual_port and virtual_port.get('mac'):
virtual_macs.append(virtual_port.get('mac').lower())
return virtual_macs