Create functions to list for shiftstack nodes

Change-Id: I568986e819b76507eec1c69e48783895ed88ec2c
This commit is contained in:
Federico Ressi 2022-06-29 13:54:23 +02:00
parent 3968bf6c36
commit d74bfc9d7a
7 changed files with 186 additions and 0 deletions

View File

@ -14,6 +14,13 @@
from __future__ import absolute_import
from tobiko.shiftstack import _clouds_file
from tobiko.shiftstack import _nova
from tobiko.shiftstack import _skip
ShiftStackCloudsFileFixture = _clouds_file.ShiftStackCloudsFileFixture
get_clouds_file_path = _clouds_file.get_clouds_file_path
find_shiftstack_node = _nova.find_shiftstack_node
list_shiftstack_nodes = _nova.list_shiftstack_nodes
skip_unless_has_shiftstack = _skip.skip_unless_has_shiftstack

View File

@ -0,0 +1,49 @@
# Copyright 2022 Red Hat
#
# 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.
from __future__ import absolute_import
import tobiko
from tobiko.openstack import keystone
from tobiko.shiftstack import _clouds_file
class ShiftstackKeystoneCredentialsFixture(
keystone.CloudsFileKeystoneCredentialsFixture):
clouds_file_fixture = tobiko.required_fixture(
_clouds_file.ShiftStackCloudsFileFixture, setup=False)
def __init__(self,
cloud_name: str = None,
clouds_file: str = None):
if clouds_file is None:
clouds_file = self.clouds_file_fixture.local_clouds_file_path
if cloud_name is None:
cloud_name = tobiko.tobiko_config().shiftstack.cloud_name
super().__init__(clouds_file=clouds_file,
cloud_name=cloud_name)
def setup_fixture(self):
tobiko.setup_fixture(self.clouds_file_fixture)
super().setup_fixture()
def shiftstack_keystone_session():
return keystone.get_keystone_session(
credentials=ShiftstackKeystoneCredentialsFixture)
def shiftstack_keystone_credentials():
return tobiko.setup_fixture(
ShiftstackKeystoneCredentialsFixture).credentials

View File

@ -0,0 +1,42 @@
# Copyright 2022 Red Hat
#
# 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.
from __future__ import absolute_import
import tobiko
from tobiko.openstack import nova
from tobiko.shiftstack import _keystone
def shiftstack_nova_client(obj: nova.NovaClientType) -> nova.NovaClient:
if obj is None:
return get_shiftstack_nova_client()
else:
return tobiko.check_valid_type(obj, nova.NovaClient)
def get_shiftstack_nova_client() -> nova.NovaClient:
session = _keystone.shiftstack_keystone_session()
return nova.get_nova_client(session=session)
def list_shiftstack_nodes(client: nova.NovaClientType = None,
**params):
client = shiftstack_nova_client(client)
return nova.list_servers(client=client, **params)
def find_shiftstack_node(client: nova.NovaClientType = None,
**params):
client = shiftstack_nova_client(client)
return nova.find_server(client=client, **params)

View File

@ -0,0 +1,51 @@
# Copyright 2022 Red Hat
#
# 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.
from __future__ import absolute_import
from oslo_log import log
import tobiko
from tobiko.shiftstack import _keystone
LOG = log.getLogger(__name__)
class HasShiftstackFixture(tobiko.SharedFixture):
def __init__(self,
has_shiftstack: bool = None):
# pylint: disable=redefined-outer-name
super(HasShiftstackFixture, self).__init__()
self.has_shiftstack = has_shiftstack
def setup_fixture(self):
if self.has_shiftstack is None:
try:
_keystone.shiftstack_keystone_session()
except Exception:
LOG.debug('Shifstack credentials not found', exc_info=1)
self.has_shiftstack = False
else:
LOG.debug('Shifstack credentials was found')
self.has_shiftstack = True
def has_shiftstack() -> bool:
return tobiko.setup_fixture(HasShiftstackFixture).has_shiftstack
def skip_unless_has_shiftstack():
return tobiko.skip_unless("Shifstack credentials not found",
predicate=has_shiftstack)

View File

@ -27,6 +27,9 @@ OPTIONS = [
cfg.StrOpt('remote_clouds_file_path',
default='~/clouds.yaml',
help="remote clouds file path on undercloud-0 host"),
cfg.StrOpt('cloud_name',
default='shiftstack',
help="Keystone credentials cloud name"),
]

View File

@ -0,0 +1,34 @@
# Copyright 2022 Red Hat
#
# 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.
from __future__ import absolute_import
import testtools
import tobiko
from tobiko import shiftstack
@shiftstack.skip_unless_has_shiftstack()
class ShiftstackNovaTest(testtools.TestCase):
def test_list_shifstack_nodes(self):
nodes = shiftstack.list_shiftstack_nodes()
self.assertIsInstance(nodes, tobiko.Selection)
self.assertNotEqual([], nodes)
return nodes
def test_find_shifstack_nodes(self):
nodes = self.test_list_shifstack_nodes()
node = shiftstack.find_shiftstack_node(name=nodes.first.name)
self.assertEqual(nodes.first.id, node.id)