bifrost-cli: do not provide any release if non can be detected

We update defaults on each stable branch to match its release, so
if no release can be detected, let's not provide 'master'.

Change-Id: I01009307a066b6c60a97959764c31b5e7624708e
This commit is contained in:
Dmitry Tantsur 2020-09-18 12:13:56 +02:00
parent 3823944c76
commit eaa04b1889
2 changed files with 77 additions and 13 deletions

View File

@ -83,29 +83,29 @@ def get_release(release):
try:
gr = configparser.ConfigParser()
gr.read(os.path.join(BASE, '.gitreview'))
release = gr.get('gerrit', 'defaultbranch',
fallback=DEFAULT_BRANCH)
release = gr.get('gerrit', 'defaultbranch', fallback=None)
except (FileNotFoundError, configparser.Error):
log('Cannot read .gitreview, falling back to release',
DEFAULT_BRANCH)
return DEFAULT_BRANCH
log('Cannot read .gitreview, falling back to defaults')
return None
else:
if release.startswith('bugfix/'):
if release and release.startswith('bugfix/'):
log('Bugfix branch', release, 'cannot be used as a release, '
'falling back to', DEFAULT_BRANCH)
return DEFAULT_BRANCH
'falling back to defaults')
return None
log('Using release', release, 'detected from the checkout')
return release
def cmd_testenv(args):
release = get_release(args.release)
env_setup(args)
log('Creating', args.count, 'test node(s) with', args.memory,
'MiB RAM and', args.disk, 'GiB of disk')
release = get_release(args.release)
kwargs = {}
if release:
kwargs['git_branch'] = release
if args.storage_pool_path:
kwargs['test_vm_storage_pool_path'] = os.path.abspath(
args.storage_pool_path)
@ -113,7 +113,6 @@ def cmd_testenv(args):
ansible('test-bifrost-create-vm.yaml',
inventory='inventory/localhost',
verbose=args.debug,
git_branch=release,
test_vm_num_nodes=args.count,
test_vm_memory_size=args.memory,
test_vm_disk_gib=args.disk,
@ -130,6 +129,9 @@ def cmd_install(args):
release = get_release(args.release)
kwargs = {}
if release:
kwargs.update({'git_branch': release,
'ipa_upstream_release': release.replace('/', '-')})
if args.dhcp_pool:
try:
start, end = args.dhcp_pool.split('-')
@ -146,8 +148,6 @@ def cmd_install(args):
ansible('install.yaml',
inventory='inventory/target',
verbose=args.debug,
git_branch=release,
ipa_upstream_release=release.replace('/', '-'),
create_ipa_image='false',
create_image_via_dib='false',
install_dib='true',

View File

@ -0,0 +1,64 @@
# 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.
import os.path
import shutil
import tempfile
from unittest import mock
from bifrost import cli
from bifrost.tests import base
FILE_NO_BRANCH = """
[gerrit]
host=review.opendev.org
port=29418
project=openstack/bifrost.git
"""
FILE_WITH_BRANCH = """
[gerrit]
host=review.opendev.org
port=29418
project=openstack/bifrost.git
defaultbranch=stable/banana
"""
class TestGetRelease(base.TestCase):
def setUp(self):
super().setUp()
self.temp_dir = tempfile.mkdtemp()
self.addCleanup(lambda: shutil.rmtree(self.temp_dir))
def test_provided(self):
self.assertEqual('stable/ussuri', cli.get_release('ussuri'))
self.assertEqual('stable/ussuri', cli.get_release('stable/ussuri'))
self.assertEqual('master', cli.get_release('master'))
@mock.patch.object(cli, 'BASE', '/non/existing/dir')
def test_no_file(self):
self.assertIsNone(cli.get_release(None))
def test_from_file_no_branch(self):
with open(os.path.join(self.temp_dir, '.gitreview'), 'wt') as fp:
fp.write(FILE_NO_BRANCH)
with mock.patch.object(cli, 'BASE', self.temp_dir):
self.assertIsNone(cli.get_release(None))
def test_from_file_with_branch(self):
with open(os.path.join(self.temp_dir, '.gitreview'), 'wt') as fp:
fp.write(FILE_WITH_BRANCH)
with mock.patch.object(cli, 'BASE', self.temp_dir):
self.assertEqual('stable/banana', cli.get_release(None))