From 6bc9d7ef975a8c681a3116fdc96af9921bbd0a3e Mon Sep 17 00:00:00 2001 From: yatin Date: Sun, 19 Aug 2018 13:23:42 +0530 Subject: [PATCH] Fix HASH for periodic jobs(use tripleo-ci-testing) Periodic jobs should use 'tripleo-ci-testing' hash as a target hash, currently 'current-tripleo' was used, this patch fixes it. Also added unit tests for the same. Also allow using promotion-testing-hash-$release in upgrade job in promotion pipeline. Closes-Bug: #1787817 Change-Id: I8893c7406fcf1bb3936f5ba2d9dca7d4a3e9e82a --- .../templates/oooq_common_functions.sh.j2 | 4 +- .../emit_releases_file/emit_releases_file.py | 9 +- .../emit_releases_file/test_release_name.py | 250 ++++++++++++++++++ scripts/oooq_common_functions.sh | 4 +- 4 files changed, 261 insertions(+), 6 deletions(-) diff --git a/playbooks/tripleo-ci/templates/oooq_common_functions.sh.j2 b/playbooks/tripleo-ci/templates/oooq_common_functions.sh.j2 index 554886a09..90e29f7a0 100644 --- a/playbooks/tripleo-ci/templates/oooq_common_functions.sh.j2 +++ b/playbooks/tripleo-ci/templates/oooq_common_functions.sh.j2 @@ -22,10 +22,10 @@ function previous_release_mixed_upgrade_case { # NOTE: we need to update this when we cut a stable branch echo "queens" ;; - stein) + stein|promotion-testing-hash-stein) echo "rocky" ;; - rocky) + rocky|promotion-testing-hash-rocky) echo "queens" ;; queens) diff --git a/scripts/emit_releases_file/emit_releases_file.py b/scripts/emit_releases_file/emit_releases_file.py index e6e635548..89084e252 100644 --- a/scripts/emit_releases_file/emit_releases_file.py +++ b/scripts/emit_releases_file/emit_releases_file.py @@ -14,6 +14,7 @@ LONG_TERM_SUPPORT_RELEASES = ['queens'] # NAMED DLRN HASHES NEWTON_HASH_NAME = 'current-passed-ci' CURRENT_HASH_NAME = 'current-tripleo' +PROMOTION_HASH_NAME = 'tripleo-ci-testing' PREVIOUS_HASH_NAME = 'previous-current-tripleo' @@ -83,7 +84,8 @@ def get_dlrn_hash(release, hash_name, retries=10, timeout=4): return full_hash[0] -def compose_releases_dictionary(stable_release, featureset, upgrade_from): +def compose_releases_dictionary(stable_release, featureset, upgrade_from, + is_periodic=False): logger = logging.getLogger('emit-releases') if stable_release not in RELEASES: raise RuntimeError("The {} release is not supported by this tool" @@ -118,6 +120,8 @@ def compose_releases_dictionary(stable_release, featureset, upgrade_from): if stable_release == 'newton': current_hash = get_dlrn_hash(stable_release, NEWTON_HASH_NAME) + elif is_periodic: + current_hash = get_dlrn_hash(stable_release, PROMOTION_HASH_NAME) else: current_hash = get_dlrn_hash(stable_release, CURRENT_HASH_NAME) @@ -273,7 +277,8 @@ if __name__ == '__main__': releases_dictionary = compose_releases_dictionary(args.stable_release, featureset, - args.upgrade_from) + args.upgrade_from, + args.is_periodic) releases_dictionary = shim_convert_old_release_names(releases_dictionary, args.is_periodic) diff --git a/scripts/emit_releases_file/test_release_name.py b/scripts/emit_releases_file/test_release_name.py index 8df26f9ef..2f3139918 100644 --- a/scripts/emit_releases_file/test_release_name.py +++ b/scripts/emit_releases_file/test_release_name.py @@ -61,6 +61,64 @@ def test_overcloud_upgrade_is_n_minus_one_to_n(mock_get_hash, 'current-tripleo')]) +@mock.patch('emit_releases_file.get_dlrn_hash') +@pytest.mark.parametrize('stable_release,expected_releases', + [('master', { + 'undercloud_install_release': 'master', + 'undercloud_install_hash': 'current-tripleo', + 'undercloud_target_release': 'master', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'queens', + 'overcloud_deploy_hash': 'old-current-tripleo', + 'overcloud_target_release': 'master', + 'overcloud_target_hash': 'current-tripleo', + }), ('rocky', { + 'undercloud_install_release': 'rocky', + 'undercloud_install_hash': 'current-tripleo', + 'undercloud_target_release': 'rocky', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'queens', + 'overcloud_deploy_hash': 'old-current-tripleo', + 'overcloud_target_release': 'rocky', + 'overcloud_target_hash': 'current-tripleo', + }), ('queens', { + 'undercloud_install_release': 'queens', + 'undercloud_install_hash': 'current-tripleo', + 'undercloud_target_release': 'queens', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'pike', + 'overcloud_deploy_hash': 'old-current-tripleo', + 'overcloud_target_release': 'queens', + 'overcloud_target_hash': 'current-tripleo', + }), ('pike', { + 'undercloud_install_release': 'pike', + 'undercloud_install_hash': 'current-tripleo', + 'undercloud_target_release': 'pike', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'ocata', + 'overcloud_deploy_hash': 'old-current-tripleo', + 'overcloud_target_release': 'pike', + 'overcloud_target_hash': 'current-tripleo', + })]) +def test_period_overcloud_upgrade_is_n_minus_one_to_n(mock_get_hash, + stable_release, + expected_releases): + mock_get_hash.side_effect = ['current-tripleo', 'old-current-tripleo'] + featureset = { + 'mixed_upgrade': True, + 'overcloud_upgrade': True, + } + upgrade_from = False + assert (compose_releases_dictionary(stable_release, + featureset, + upgrade_from, + is_periodic=True) == expected_releases) + mock_get_hash.assert_has_calls( + [mock.call(stable_release, 'tripleo-ci-testing'), + mock.call(expected_releases['overcloud_deploy_release'], + 'current-tripleo')]) + + @mock.patch('emit_releases_file.get_dlrn_hash') @pytest.mark.parametrize('stable_release,expected_releases', [ ('queens', { @@ -92,6 +150,38 @@ def test_ffu_overcloud_upgrade_is_n_minus_three_to_n(mock_get_hash, 'current-passed-ci')]) +@mock.patch('emit_releases_file.get_dlrn_hash') +@pytest.mark.parametrize('stable_release,expected_releases', [ + ('queens', { + 'undercloud_install_release': 'queens', + 'undercloud_install_hash': 'current-tripleo', + 'undercloud_target_release': 'queens', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'newton', + 'overcloud_deploy_hash': 'old-current-tripleo', + 'overcloud_target_release': 'queens', + 'overcloud_target_hash': 'current-tripleo', + }), +]) +def test_period_ffu_overcloud_upgrade_is_n_minus_three_to_n(mock_get_hash, + stable_release, + expected_releases): + mock_get_hash.side_effect = ['current-tripleo', 'old-current-tripleo'] + featureset = { + 'mixed_upgrade': True, + 'ffu_overcloud_upgrade': True, + } + upgrade_from = False + assert (compose_releases_dictionary(stable_release, + featureset, + upgrade_from, + is_periodic=True) == expected_releases) + mock_get_hash.assert_has_calls( + [mock.call(stable_release, 'tripleo-ci-testing'), + mock.call(expected_releases['overcloud_deploy_release'], + 'current-passed-ci')]) + + @mock.patch('emit_releases_file.get_dlrn_hash') @pytest.mark.parametrize('stable_release,expected_releases', [ ('master', { @@ -122,6 +212,37 @@ def test_undercloud_upgrade_is_n_minus_one_to_n(mock_get_hash, 'current-tripleo')]) +@mock.patch('emit_releases_file.get_dlrn_hash') +@pytest.mark.parametrize('stable_release,expected_releases', [ + ('master', { + 'undercloud_install_release': 'queens', + 'undercloud_install_hash': 'old-current-tripleo', + 'undercloud_target_release': 'master', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'master', + 'overcloud_deploy_hash': 'current-tripleo', + 'overcloud_target_release': 'master', + 'overcloud_target_hash': 'current-tripleo', + }), +]) +def test_period_undercloud_upgrade_is_n_minus_one_to_n(mock_get_hash, + stable_release, + expected_releases): + mock_get_hash.side_effect = ['current-tripleo', 'old-current-tripleo'] + featureset = { + 'undercloud_upgrade': True, + } + upgrade_from = False + assert (compose_releases_dictionary(stable_release, + featureset, + upgrade_from, + is_periodic=True) == expected_releases) + mock_get_hash.assert_has_calls( + [mock.call(stable_release, 'tripleo-ci-testing'), + mock.call(expected_releases['undercloud_install_release'], + 'current-tripleo')]) + + @mock.patch('emit_releases_file.get_dlrn_hash') @pytest.mark.parametrize( 'stable_release,expected_releases', @@ -134,6 +255,15 @@ def test_undercloud_upgrade_is_n_minus_one_to_n(mock_get_hash, 'overcloud_deploy_hash': 'previous-current-tripleo', 'overcloud_target_release': 'master', 'overcloud_target_hash': 'current-tripleo', + }), ('rocky', { + 'undercloud_install_release': 'rocky', + 'undercloud_install_hash': 'current-tripleo', + 'undercloud_target_release': 'rocky', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'rocky', + 'overcloud_deploy_hash': 'previous-current-tripleo', + 'overcloud_target_release': 'rocky', + 'overcloud_target_hash': 'current-tripleo', }), ('queens', { 'undercloud_install_release': 'queens', 'undercloud_install_hash': 'current-tripleo', @@ -161,6 +291,56 @@ def test_overcloud_update_target_is_hash(mock_get_hash, 'previous-current-tripleo')]) +@mock.patch('emit_releases_file.get_dlrn_hash') +@pytest.mark.parametrize( + 'stable_release,expected_releases', + [('master', { + 'undercloud_install_release': 'master', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'master', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'master', + 'overcloud_deploy_hash': 'previous-current-tripleo', + 'overcloud_target_release': 'master', + 'overcloud_target_hash': 'tripleo-ci-testing', + }), ('rocky', { + 'undercloud_install_release': 'rocky', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'rocky', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'rocky', + 'overcloud_deploy_hash': 'previous-current-tripleo', + 'overcloud_target_release': 'rocky', + 'overcloud_target_hash': 'tripleo-ci-testing', + }), ('queens', { + 'undercloud_install_release': 'queens', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'queens', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'queens', + 'overcloud_deploy_hash': 'previous-current-tripleo', + 'overcloud_target_release': 'queens', + 'overcloud_target_hash': 'tripleo-ci-testing', + })]) +def test_period_overcloud_update_target_is_hash(mock_get_hash, + stable_release, + expected_releases): + mock_get_hash.side_effect = ['tripleo-ci-testing', + 'previous-current-tripleo'] + featureset = { + 'overcloud_update': True, + } + upgrade_from = False + assert (compose_releases_dictionary(stable_release, + featureset, + upgrade_from, + is_periodic=True) == expected_releases) + mock_get_hash.assert_has_calls( + [mock.call(stable_release, 'tripleo-ci-testing'), + mock.call(expected_releases['overcloud_deploy_release'], + 'previous-current-tripleo')]) + + @mock.patch('emit_releases_file.get_dlrn_hash') @pytest.mark.parametrize('stable_release,expected_releases', [('master', { @@ -172,6 +352,15 @@ def test_overcloud_update_target_is_hash(mock_get_hash, 'overcloud_deploy_hash': 'current-tripleo', 'overcloud_target_release': 'master', 'overcloud_target_hash': 'current-tripleo', + }), ('rocky', { + 'undercloud_install_release': 'rocky', + 'undercloud_install_hash': 'current-tripleo', + 'undercloud_target_release': 'rocky', + 'undercloud_target_hash': 'current-tripleo', + 'overcloud_deploy_release': 'rocky', + 'overcloud_deploy_hash': 'current-tripleo', + 'overcloud_target_release': 'rocky', + 'overcloud_target_hash': 'current-tripleo', }), ('queens', { 'undercloud_install_release': 'queens', 'undercloud_install_hash': 'current-tripleo', @@ -210,3 +399,64 @@ def test_noop_target_is_the_same(mock_get_hash, featureset, upgrade_from) == expected_releases) mock_get_hash.assert_called_once_with(stable_release, 'current-tripleo') + + +@mock.patch('emit_releases_file.get_dlrn_hash') +@pytest.mark.parametrize('stable_release,expected_releases', + [('master', { + 'undercloud_install_release': 'master', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'master', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'master', + 'overcloud_deploy_hash': 'tripleo-ci-testing', + 'overcloud_target_release': 'master', + 'overcloud_target_hash': 'tripleo-ci-testing', + }), ('rocky', { + 'undercloud_install_release': 'rocky', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'rocky', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'rocky', + 'overcloud_deploy_hash': 'tripleo-ci-testing', + 'overcloud_target_release': 'rocky', + 'overcloud_target_hash': 'tripleo-ci-testing', + }), ('queens', { + 'undercloud_install_release': 'queens', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'queens', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'queens', + 'overcloud_deploy_hash': 'tripleo-ci-testing', + 'overcloud_target_release': 'queens', + 'overcloud_target_hash': 'tripleo-ci-testing', + }), ('pike', { + 'undercloud_install_release': 'pike', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'pike', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'pike', + 'overcloud_deploy_hash': 'tripleo-ci-testing', + 'overcloud_target_release': 'pike', + 'overcloud_target_hash': 'tripleo-ci-testing', + }), ('ocata', { + 'undercloud_install_release': 'ocata', + 'undercloud_install_hash': 'tripleo-ci-testing', + 'undercloud_target_release': 'ocata', + 'undercloud_target_hash': 'tripleo-ci-testing', + 'overcloud_deploy_release': 'ocata', + 'overcloud_deploy_hash': 'tripleo-ci-testing', + 'overcloud_target_release': 'ocata', + 'overcloud_target_hash': 'tripleo-ci-testing', + })]) +def test_periodic_noop_target_is_the_same(mock_get_hash, + stable_release, + expected_releases): + mock_get_hash.return_value = 'tripleo-ci-testing' + featureset = {} + upgrade_from = False + assert (compose_releases_dictionary(stable_release, + featureset, + upgrade_from, + is_periodic=True) == expected_releases) + mock_get_hash.assert_called_once_with(stable_release, 'tripleo-ci-testing') diff --git a/scripts/oooq_common_functions.sh b/scripts/oooq_common_functions.sh index 0be9160fb..81f818737 100644 --- a/scripts/oooq_common_functions.sh +++ b/scripts/oooq_common_functions.sh @@ -22,10 +22,10 @@ function previous_release_mixed_upgrade_case { # NOTE: we need to update this when we cut a stable branch echo "queens" ;; - stein) + stein|promotion-testing-hash-stein) echo "rocky" ;; - rocky) + rocky|promotion-testing-hash-rocky) echo "queens" ;; queens)