Gate Fix: remove nova hosts deprecated table
This commit removes the deprecated nova hosts table from the nova driver. It uses superseded hypervisor list instead. Ref: I85a287ff2666c2dcdcbbc8fd6c2e285176f7a67a Closes-Bug: #1755156 Change-Id: I6cfdc72332fa7a03a65793beffd246d07c3a1f07
This commit is contained in:
parent
6a3369b683
commit
250fa0c3e8
|
@ -13,15 +13,18 @@
|
|||
# under the License.
|
||||
#
|
||||
|
||||
"""Schema version history
|
||||
"""Schema change history
|
||||
|
||||
date: 2018-03-15
|
||||
changes:
|
||||
- (incompatible) Removed the `hosts` table for OS hosts information because
|
||||
access to the information has been removed from the latest Nova API and
|
||||
client.
|
||||
- Added the `hypervisors` table for hypervisor information.
|
||||
|
||||
version: 2.1
|
||||
date: 2017-10-01
|
||||
changes:
|
||||
- Added the tags table for server tags information.
|
||||
|
||||
version: 2.0
|
||||
Initial schema version.
|
||||
- Added the `tags` table for server tags information.
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
@ -43,7 +46,7 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
datasource_driver.ExecutionDriver):
|
||||
SERVERS = "servers"
|
||||
FLAVORS = "flavors"
|
||||
HOSTS = "hosts"
|
||||
HYPERVISORS = "hypervisors"
|
||||
SERVICES = 'services'
|
||||
AVAILABILITY_ZONES = "availability_zones"
|
||||
TAGS = "tags"
|
||||
|
@ -122,16 +125,18 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
{'fieldname': 'rxtx_factor', 'desc': 'RX/TX factor',
|
||||
'translator': value_trans})}
|
||||
|
||||
hosts_translator = {
|
||||
hypervisors_translator = {
|
||||
'translation-type': 'HDICT',
|
||||
'table-name': HOSTS,
|
||||
'table-name': HYPERVISORS,
|
||||
'selector-type': 'DOT_SELECTOR',
|
||||
'field-translators':
|
||||
({'fieldname': 'host_name', 'desc': 'Name of host',
|
||||
({'fieldname': 'hypervisor_hostname', 'desc': 'Hypervisor host',
|
||||
'translator': value_trans},
|
||||
{'fieldname': 'service', 'desc': 'Enabled service',
|
||||
{'fieldname': 'id', 'desc': 'hypervisori id',
|
||||
'translator': value_trans},
|
||||
{'fieldname': 'zone', 'desc': 'The availability zone of host',
|
||||
{'fieldname': 'state', 'desc': 'State of the hypervisor',
|
||||
'translator': value_trans},
|
||||
{'fieldname': 'status', 'desc': 'Status of the hypervisor',
|
||||
'translator': value_trans})}
|
||||
|
||||
services_translator = {
|
||||
|
@ -167,8 +172,8 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
'desc': 'Availability zone state',
|
||||
'translator': value_trans})}
|
||||
|
||||
TRANSLATORS = [servers_translator, flavors_translator, hosts_translator,
|
||||
services_translator, availability_zones_translator]
|
||||
TRANSLATORS = [servers_translator, flavors_translator, services_translator,
|
||||
hypervisors_translator, availability_zones_translator]
|
||||
|
||||
def __init__(self, name='', args=None):
|
||||
super(NovaDriver, self).__init__(name, args)
|
||||
|
@ -215,9 +220,10 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
self.nova_client.flavors.list())
|
||||
self.add_update_method(flavors_method, self.flavors_translator)
|
||||
|
||||
hosts_method = lambda: self._translate_hosts(
|
||||
self.nova_client.hosts.list())
|
||||
self.add_update_method(hosts_method, self.hosts_translator)
|
||||
hypervisors_method = lambda: self._translate_hypervisors(
|
||||
self.nova_client.hypervisors.list())
|
||||
self.add_update_method(hypervisors_method,
|
||||
self.hypervisors_translator)
|
||||
|
||||
services_method = lambda: self._translate_services(
|
||||
self.nova_client.services.list())
|
||||
|
@ -237,9 +243,11 @@ class NovaDriver(datasource_driver.PollingDataSourceDriver,
|
|||
row_data = NovaDriver.convert_objs(obj, NovaDriver.flavors_translator)
|
||||
return row_data
|
||||
|
||||
@ds_utils.update_state_on_changed(HOSTS)
|
||||
def _translate_hosts(self, obj):
|
||||
row_data = NovaDriver.convert_objs(obj, NovaDriver.hosts_translator)
|
||||
@ds_utils.update_state_on_changed(HYPERVISORS)
|
||||
def _translate_hypervisors(self, obj):
|
||||
row_data = NovaDriver.convert_objs(
|
||||
obj,
|
||||
NovaDriver.hypervisors_translator)
|
||||
return row_data
|
||||
|
||||
@ds_utils.update_state_on_changed(SERVICES)
|
||||
|
|
|
@ -29,8 +29,10 @@ class NovaFakeClient(mock.MagicMock):
|
|||
self.flavors = mock.MagicMock()
|
||||
self.flavors.list.return_value = self.get_flavor_list()
|
||||
|
||||
self.hosts = mock.MagicMock()
|
||||
self.hosts.list.return_value = self.get_host_list()
|
||||
# self.hosts = mock.MagicMock()
|
||||
# self.hosts.list.return_value = self.get_host_list()
|
||||
self.hypervisors = mock.MagicMock()
|
||||
self.hypervisors.list.return_value = self.get_hypervisor_list()
|
||||
self.services = mock.MagicMock()
|
||||
self.services.list.return_value = self.get_service_list()
|
||||
|
||||
|
@ -111,16 +113,30 @@ class NovaFakeClient(mock.MagicMock):
|
|||
|
||||
return [flavor_one, flavor_two, flavor_three, flavor_four]
|
||||
|
||||
def get_host(self, host_name, service, zone):
|
||||
# def get_host(self, host_name, service, zone):
|
||||
# h = mock.MagicMock()
|
||||
# h.host_name = host_name
|
||||
# h.service = service
|
||||
# h.zone = zone
|
||||
# return h
|
||||
#
|
||||
# def get_host_list(self):
|
||||
# h_one = self.get_host('host1', 'nova-compute', 'nova1')
|
||||
# h_two = self.get_host('host2', 'nova-cert', 'nova1')
|
||||
#
|
||||
# return [h_one, h_two]
|
||||
|
||||
def get_hypervisor(self, host_name, id_, state, status):
|
||||
h = mock.MagicMock()
|
||||
h.host_name = host_name
|
||||
h.service = service
|
||||
h.zone = zone
|
||||
h.hypervisor_hostname = host_name
|
||||
h.id = id_
|
||||
h.state = state
|
||||
h.status = status
|
||||
return h
|
||||
|
||||
def get_host_list(self):
|
||||
h_one = self.get_host('host1', 'nova-compute', 'nova1')
|
||||
h_two = self.get_host('host2', 'nova-cert', 'nova1')
|
||||
def get_hypervisor_list(self):
|
||||
h_one = self.get_hypervisor('host1', '2', 'up', 'enabled')
|
||||
h_two = self.get_hypervisor('host2', '3', 'down', 'enabled')
|
||||
|
||||
return [h_one, h_two]
|
||||
|
||||
|
|
|
@ -179,29 +179,42 @@ class TestNovaDriver(base.TestCase):
|
|||
self.assertEqual(2.0, rxtx_factor)
|
||||
self.assertEqual('1024 MB Server', name)
|
||||
|
||||
def test_hosts(self):
|
||||
host_list = self.nova.hosts.list()
|
||||
self.driver._translate_hosts(host_list)
|
||||
host_tuples = self.driver.state[self.driver.HOSTS]
|
||||
self.assertEqual(2, len(host_tuples))
|
||||
# {'hosts':
|
||||
# [{'host_name': 'host1',
|
||||
# 'service': 'nova-compute',
|
||||
# 'zone': zone},
|
||||
# {'host_name': 'host2',
|
||||
# 'service': 'nova-cert',
|
||||
# 'zone': zone}]}
|
||||
for host in host_tuples:
|
||||
# def test_hosts(self):
|
||||
# host_list = self.nova.hosts.list()
|
||||
# self.driver._translate_hosts(host_list)
|
||||
# host_tuples = self.driver.state[self.driver.HOSTS]
|
||||
# self.assertEqual(2, len(host_tuples))
|
||||
# for host in host_tuples:
|
||||
# host_name = host[0]
|
||||
# service = host[1]
|
||||
# zone = host[2]
|
||||
#
|
||||
# if host_name == 'host1':
|
||||
# self.assertEqual('nova-compute', service)
|
||||
# self.assertEqual('nova1', str(zone))
|
||||
# elif host_name == 'host2':
|
||||
# self.assertEqual('nova-cert', service)
|
||||
# self.assertEqual('nova1', str(zone))
|
||||
|
||||
def test_hypervisors(self):
|
||||
hypervisors = self.nova.hypervisors.list()
|
||||
self.driver._translate_hypervisors(hypervisors)
|
||||
hypervisor_tuples = self.driver.state[self.driver.HYPERVISORS]
|
||||
self.assertEqual(2, len(hypervisor_tuples))
|
||||
for host in hypervisor_tuples:
|
||||
host_name = host[0]
|
||||
service = host[1]
|
||||
zone = host[2]
|
||||
id = host[1]
|
||||
state = host[2]
|
||||
status = host[3]
|
||||
|
||||
if host_name == 'host1':
|
||||
self.assertEqual('nova-compute', service)
|
||||
self.assertEqual('nova1', str(zone))
|
||||
self.assertEqual('2', id)
|
||||
self.assertEqual('up', state)
|
||||
self.assertEqual('enabled', status)
|
||||
elif host_name == 'host2':
|
||||
self.assertEqual('nova-cert', service)
|
||||
self.assertEqual('nova1', str(zone))
|
||||
self.assertEqual('3', id)
|
||||
self.assertEqual('down', state)
|
||||
self.assertEqual('enabled', status)
|
||||
|
||||
def test_services(self):
|
||||
service_list = self.nova.services.list()
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
prelude: >
|
||||
features:
|
||||
- The Nova data source driver now supports the
|
||||
`hypervisors` table, replacing the old `hosts` table.
|
||||
upgrade:
|
||||
- Nova os-hosts API had been deprecated since Pike and
|
||||
no longer available in the latest Nova client. As a
|
||||
result, the `hosts` table is no longer available in
|
||||
the Nova data source driver. In its place, please use
|
||||
the new `hypervisors` table.
|
Loading…
Reference in New Issue