diff --git a/tobiko/openstack/glance/config.py b/tobiko/openstack/glance/config.py index a3bfd7abf..369cf7995 100644 --- a/tobiko/openstack/glance/config.py +++ b/tobiko/openstack/glance/config.py @@ -30,6 +30,7 @@ OPTIONS = [ GLANCE_IMAGE_NAMES = ['centos', 'centos7', 'cirros', + 'fedora', 'rhel', 'ubuntu'] diff --git a/tobiko/openstack/stacks/__init__.py b/tobiko/openstack/stacks/__init__.py index 39f7c4635..923bc3513 100644 --- a/tobiko/openstack/stacks/__init__.py +++ b/tobiko/openstack/stacks/__init__.py @@ -17,6 +17,7 @@ from __future__ import absolute_import from tobiko.openstack.stacks import _centos from tobiko.openstack.stacks import _cirros +from tobiko.openstack.stacks import _fedora from tobiko.openstack.stacks import _redhat from tobiko.openstack.stacks import _l3ha from tobiko.openstack.stacks import _neutron @@ -42,6 +43,10 @@ EvacuableCirrosImageFixture = _cirros.EvacuableCirrosImageFixture EvacuableServerStackFixture = _cirros.EvacuableServerStackFixture CirrosHttpServerStackFixture = _cirros.CirrosHttpServerStackFixture +FedoraFlavorStackFixture = _fedora.FedoraFlavorStackFixture +FedoraImageFixture = _fedora.FedoraImageFixture +FedoraServerStackFixture = _fedora.FedoraServerStackFixture + RedHatFlavorStackFixture = _redhat.RedHatFlavorStackFixture RhelImageFixture = _redhat.RhelImageFixture RedHatServerStackFixture = _redhat.RedHatServerStackFixture diff --git a/tobiko/openstack/stacks/_fedora.py b/tobiko/openstack/stacks/_fedora.py new file mode 100644 index 000000000..2f2bcb571 --- /dev/null +++ b/tobiko/openstack/stacks/_fedora.py @@ -0,0 +1,63 @@ +# Copyright 2019 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 typing + +import tobiko +from tobiko import config +from tobiko.openstack import glance +from tobiko.openstack.stacks import _nova + + +CONF = config.CONF + + +FEDORA_IMAGE_URL = ( + 'https://download.fedoraproject.org/pub/fedora/linux/releases/34/Cloud/' + 'x86_64/images/Fedora-Cloud-Base-34-1.2.x86_64.qcow2') + + +class FedoraBaseImageFixture(glance.URLGlanceImageFixture): + image_url = CONF.tobiko.fedora.image_url or FEDORA_IMAGE_URL + image_name = CONF.tobiko.fedora.image_name + image_file = CONF.tobiko.fedora.image_file + disk_format = CONF.tobiko.fedora.disk_format or "qcow2" + container_format = CONF.tobiko.fedora.container_format or "bare" + username = CONF.tobiko.fedora.username or 'fedora' + password = CONF.tobiko.fedora.password + connection_timeout = CONF.tobiko.fedora.connection_timeout or 800. + + +class FedoraImageFixture(FedoraBaseImageFixture, + glance.CustomizedGlanceImageFixture): + + @property + def run_commands(self) -> typing.List[str]: + return super().run_commands + [ + 'update-crypto-policies --set LEGACY'] + + +class FedoraFlavorStackFixture(_nova.FlavorStackFixture): + ram = 256 + swap = 1024 + + +class FedoraServerStackFixture(_nova.CloudInitServerStackFixture): + + #: Glance image used to create a Nova server instance + image_fixture = tobiko.required_setup_fixture(FedoraImageFixture) + + #: Flavor used to create a Nova server instance + flavor_stack = tobiko.required_setup_fixture(FedoraFlavorStackFixture) diff --git a/tobiko/tests/functional/openstack/stacks/test_fedora.py b/tobiko/tests/functional/openstack/stacks/test_fedora.py new file mode 100644 index 000000000..c8b1b72b2 --- /dev/null +++ b/tobiko/tests/functional/openstack/stacks/test_fedora.py @@ -0,0 +1,47 @@ +# Copyright (c) 2019 Red Hat, Inc. +# +# All Rights Reserved. +# +# 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.shell import sh +from tobiko.openstack import keystone +from tobiko.openstack import nova +from tobiko.openstack import stacks +from tobiko.tests.functional.openstack.stacks import test_cirros + + +@keystone.skip_unless_has_keystone_credentials() +class FedoraServerStackTest(test_cirros.CirrosServerStackTest): + """Test Fedora server instance""" + + #: Stack of resources with a server attached to a floating IP + stack = tobiko.required_setup_fixture(stacks.FedoraServerStackFixture) + + nameservers_filenames = ('/run/systemd/resolve/resolv.conf',) + + def test_user_data(self): + user_data = self.stack.user_data + self.assertEqual('', user_data) + + def test_python3(self): + python_version = sh.execute(['/usr/bin/python3', + '--version'], + ssh_client=self.stack.ssh_client).stdout + self.assertTrue(python_version.startswith('Python 3.'), + python_version) + + def test_cloud_init_done(self): + nova.wait_for_cloud_init_done(ssh_client=self.stack.ssh_client)