Create functions to list for shiftstack nodes
Change-Id: I568986e819b76507eec1c69e48783895ed88ec2c
This commit is contained in:
parent
3968bf6c36
commit
d74bfc9d7a
|
@ -14,6 +14,13 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
from tobiko.shiftstack import _clouds_file
|
from tobiko.shiftstack import _clouds_file
|
||||||
|
from tobiko.shiftstack import _nova
|
||||||
|
from tobiko.shiftstack import _skip
|
||||||
|
|
||||||
ShiftStackCloudsFileFixture = _clouds_file.ShiftStackCloudsFileFixture
|
ShiftStackCloudsFileFixture = _clouds_file.ShiftStackCloudsFileFixture
|
||||||
get_clouds_file_path = _clouds_file.get_clouds_file_path
|
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
|
||||||
|
|
|
@ -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
|
|
@ -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)
|
|
@ -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)
|
|
@ -27,6 +27,9 @@ OPTIONS = [
|
||||||
cfg.StrOpt('remote_clouds_file_path',
|
cfg.StrOpt('remote_clouds_file_path',
|
||||||
default='~/clouds.yaml',
|
default='~/clouds.yaml',
|
||||||
help="remote clouds file path on undercloud-0 host"),
|
help="remote clouds file path on undercloud-0 host"),
|
||||||
|
cfg.StrOpt('cloud_name',
|
||||||
|
default='shiftstack',
|
||||||
|
help="Keystone credentials cloud name"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue