Update dpdk and sr-iov configuration methods with new api

Serialization for features mentioned in title was changed so
we have to use new fields

Change-Id: If362a37fdb16d6672a266567490e67a22ba16f3e
Partial-bug:1644588
(cherry picked from commit 11783da6ac)
This commit is contained in:
Vladimir Khlyunev 2016-11-29 11:54:41 +03:00 committed by Sergey Novikov
parent 8c798b4f37
commit 6bf6fcdeff
1 changed files with 57 additions and 36 deletions

View File

@ -3153,46 +3153,58 @@ class FuelWebClient29(object):
self.client.upload_node_attributes(node_attributes, nailgun_node_id)
def check_dpdk(self, nailgun_node_id, net='private'):
compute_net = self.client.get_node_interfaces(nailgun_node_id)
dpdk_available = False
dpdk_enabled = False
for interface in compute_net:
if net not in [n['name'] for n in interface['assigned_networks']]:
continue
if 'dpdk' not in interface['interface_properties']:
continue
compute_interfaces = self.client.get_node_interfaces(nailgun_node_id)
target_interface = None
for interface in compute_interfaces:
if net in [n['name'] for n in interface['assigned_networks']]:
target_interface = interface
break
dpdk_available = interface['interface_properties']['dpdk'][
assert_is_not_none(
target_interface,
"Network {!r} is not found on interfaces".format(net))
if 'interface_properties' in target_interface.keys():
logger.debug("Using old interface serialization scheme")
dpdk_available = target_interface['interface_properties']['dpdk'][
'available']
if 'enabled' in interface['interface_properties']['dpdk']:
dpdk_enabled = interface['interface_properties']['dpdk'][
'enabled']
break
dpdk_enabled = target_interface['interface_properties']['dpdk'][
'enabled']
else:
logger.debug("Using new interface serialization scheme")
dpdk_available = target_interface['meta']['dpdk']['available']
dpdk_enabled = target_interface['attributes']['dpdk'][
'enabled']['value']
return {'available': dpdk_available, 'enabled': dpdk_enabled}
def enable_dpdk(self, nailgun_node_id, switch_to=True, net='private',
forceEnable=False):
if not forceEnable:
force_enable=False):
if not force_enable:
assert_true(self.check_dpdk(nailgun_node_id, net=net)['available'],
'DPDK not available on selected interface')
compute_net = self.client.get_node_interfaces(
nailgun_node_id)
for interface in compute_net:
for ids in interface['assigned_networks']:
if ids['name'] == net:
if interface['type'] == 'bond':
interface['bond_properties']['type__'] = 'dpdkovs'
interface['interface_properties']['dpdk'].update(
{'enabled': switch_to})
else:
interface['interface_properties']['dpdk'][
'enabled'] = switch_to
break
compute_interfaces = self.client.get_node_interfaces(nailgun_node_id)
target_interface = None
for interface in compute_interfaces:
if net in [n['name'] for n in interface['assigned_networks']]:
target_interface = interface
break
self.client.put_node_interfaces(
[{'id': nailgun_node_id, 'interfaces': compute_net}])
if target_interface['type'] == 'bond':
target_interface['bond_properties']['type__'] = 'dpdkovs'
if 'interface_properties' in target_interface.keys():
logger.debug("Using old interface serialization scheme")
target_interface['interface_properties']['dpdk'][
'enabled'] = switch_to
else:
logger.debug("Using new interface serialization scheme")
target_interface['attributes']['dpdk'][
'enabled']['value'] = switch_to
self.client.put_node_interfaces([{'id': nailgun_node_id,
'interfaces': compute_interfaces}])
return self.check_dpdk(
nailgun_node_id, net=net)['enabled'] == switch_to
@ -3211,10 +3223,10 @@ class FuelWebClient29(object):
devops_sriov_nics.append(interface['name'])
if interface['assigned_networks']:
continue
if 'sriov' not in interface['interface_properties']:
api_key = "meta" if "meta" in interface else "interface_properties"
if 'sriov' not in interface[api_key]:
continue
sriov_available = interface['interface_properties']['sriov'][
'available']
sriov_available = interface[api_key]['sriov']['available']
if sriov_available:
nailgun_sriov_nics.append(interface['name'])
return set(devops_sriov_nics).intersection(nailgun_sriov_nics)
@ -3228,9 +3240,18 @@ class FuelWebClient29(object):
for interface in node_networks:
if interface['name'] not in nics_to_enable_sriov:
continue
interface['interface_properties']['sriov']['enabled'] = True
interface['interface_properties']['sriov']['sriov_numvfs'] = \
interface['interface_properties']['sriov']['sriov_totalvfs']
if 'interface_properties' in interface:
interface['interface_properties']['sriov']['enabled'] = True
interface['interface_properties']['sriov'][
'sriov_numvfs'] = interface['interface_properties'][
'sriov']['sriov_totalvfs']
else:
interface['attributes']['sriov']['enabled']['value'] = True
interface['attributes']['sriov']['numvfs'] = \
interface['meta']['sriov']['totalvfs']
self.client.put_node_interfaces(
[{'id': nailgun_node_id, 'interfaces': node_networks}])
self.client.put_node_interfaces(
[{'id': nailgun_node_id, 'interfaces': node_networks}])