Merge lp:~corey.bryant/charm-helpers/os-release-check-candidate into lp:charm-helpers

Proposed by Corey Bryant
Status: Merged
Merged at revision: 605
Proposed branch: lp:~corey.bryant/charm-helpers/os-release-check-candidate
Merge into: lp:charm-helpers
Diff against target: 231 lines (+66/-31)
2 files modified
charmhelpers/contrib/openstack/utils.py (+30/-10)
tests/contrib/openstack/test_openstack_utils.py (+36/-21)
To merge this branch: bzr merge lp:~corey.bryant/charm-helpers/os-release-check-candidate
Reviewer Review Type Date Requested Status
James Page Needs Fixing
Review via email: mp+299598@code.launchpad.net
To post a comment you must log in.
602. By Ryan Beisner

[chris.macnaughton, r=1chb1n] Add ceph-proxy to source charms for openstack amulet helper

603. By Corey Bryant

Add flag to disable upper constraints

By default, deploy from source now uses upper constraints to install
known good dependency versions. Upper contraints will always be used
when using openstack-origin-git default values. However when manually
specifying git repos to openstack-origin-git, users can now set
use_contraints to false, allowing various openstack dependency versions
to be tested.

604. By Corey Bryant

Drop kilo DFS default because upper constraints doesn't work in kilo for openstack-dashboard and glance.

605. By Corey Bryant

Determine openstack release based on openstack-origin-git

Prior to this change, when a charm specified openstack-origin-git
to deploy from source, it also required openstack-origin to be specified
to determine the openstack relase. This drops the need for specifying
openstack-origin.

Revision history for this message
James Page (james-page) wrote :

Two comments - I think yakkety/newton is mixed up a bit.

review: Needs Fixing
606. By Corey Bryant

Switch yakkety typo to newton

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'charmhelpers/contrib/openstack/utils.py'
--- charmhelpers/contrib/openstack/utils.py 2016-07-06 14:41:05 +0000
+++ charmhelpers/contrib/openstack/utils.py 2016-07-13 12:27:09 +0000
@@ -220,7 +220,6 @@
220}220}
221221
222GIT_DEFAULT_BRANCHES = {222GIT_DEFAULT_BRANCHES = {
223 'kilo': 'stable/kilo',
224 'liberty': 'stable/liberty',223 'liberty': 'stable/liberty',
225 'mitaka': 'stable/mitaka',224 'mitaka': 'stable/mitaka',
226 'master': 'master',225 'master': 'master',
@@ -413,7 +412,8 @@
413 global os_rel412 global os_rel
414 if os_rel:413 if os_rel:
415 return os_rel414 return os_rel
416 os_rel = (get_os_codename_package(package, fatal=False) or415 os_rel = (git_os_codename_install_source(config('openstack-origin-git')) or
416 get_os_codename_package(package, fatal=False) or
417 get_os_codename_install_source(config('openstack-origin')) or417 get_os_codename_install_source(config('openstack-origin')) or
418 base)418 base)
419 return os_rel419 return os_rel
@@ -719,7 +719,24 @@
719 return config('openstack-origin-git') is not None719 return config('openstack-origin-git') is not None
720720
721721
722requirements_dir = None722def git_os_codename_install_source(projects_yaml):
723 """
724 Returns OpenStack codename of release being installed from source.
725 """
726 if git_install_requested():
727 projects = _git_yaml_load(projects_yaml)
728
729 if projects in GIT_DEFAULT_BRANCHES.keys():
730 if projects == 'master':
731 return 'newton'
732 return projects
733
734 if 'release' in projects:
735 if projects['release'] == 'master':
736 return 'newton'
737 return projects['release']
738
739 return None
723740
724741
725def git_default_repos(projects_yaml):742def git_default_repos(projects_yaml):
@@ -740,12 +757,6 @@
740 }757 }
741 repos = [repo]758 repos = [repo]
742759
743 # NOTE(coreycb): This is a temp work-around until the requirements
744 # repo moves from stable/kilo branch to kilo-eol tag. The core
745 # repos have already done this.
746 if default == 'kilo':
747 branch = 'kilo-eol'
748
749 # neutron-* and nova-* charms require some additional repos760 # neutron-* and nova-* charms require some additional repos
750 if service in ['neutron-api', 'neutron-gateway',761 if service in ['neutron-api', 'neutron-gateway',
751 'neutron-openvswitch']:762 'neutron-openvswitch']:
@@ -778,7 +789,7 @@
778 }789 }
779 repos.append(repo)790 repos.append(repo)
780791
781 return yaml.dump(dict(repositories=repos))792 return yaml.dump(dict(repositories=repos, release=default))
782793
783 return projects_yaml794 return projects_yaml
784795
@@ -793,6 +804,9 @@
793 return yaml.load(projects_yaml)804 return yaml.load(projects_yaml)
794805
795806
807requirements_dir = None
808
809
796def git_clone_and_install(projects_yaml, core_project):810def git_clone_and_install(projects_yaml, core_project):
797 """811 """
798 Clone/install all specified OpenStack repositories.812 Clone/install all specified OpenStack repositories.
@@ -856,6 +870,10 @@
856 # upper-constraints didn't exist until after icehouse870 # upper-constraints didn't exist until after icehouse
857 if not os.path.isfile(constraints):871 if not os.path.isfile(constraints):
858 constraints = None872 constraints = None
873 # use constraints unless project yaml sets use_constraints to false
874 if 'use_constraints' in projects.keys():
875 if not projects['use_constraints']:
876 constraints = None
859 else:877 else:
860 repo_dir = _git_clone_and_install_single(repo, branch, depth,878 repo_dir = _git_clone_and_install_single(repo, branch, depth,
861 parent_dir, http_proxy,879 parent_dir, http_proxy,
@@ -882,6 +900,8 @@
882 if projects['repositories'][-1]['name'] != core_project:900 if projects['repositories'][-1]['name'] != core_project:
883 error_out('{} git repo must be specified last'.format(core_project))901 error_out('{} git repo must be specified last'.format(core_project))
884902
903 _git_ensure_key_exists('release', projects)
904
885905
886def _git_ensure_key_exists(key, keys):906def _git_ensure_key_exists(key, keys):
887 """907 """
888908
=== modified file 'tests/contrib/openstack/test_openstack_utils.py'
--- tests/contrib/openstack/test_openstack_utils.py 2016-06-30 12:41:13 +0000
+++ tests/contrib/openstack/test_openstack_utils.py 2016-07-13 12:27:09 +0000
@@ -110,14 +110,16 @@
110 ('cloud:precise-icehouse/updates', url + ' precise-updates/icehouse main'),110 ('cloud:precise-icehouse/updates', url + ' precise-updates/icehouse main'),
111]111]
112112
113openstack_origin_git = \113openstack_origin_git = """
114 """repositories:114 release: master
115 - {name: requirements,115 repositories:
116 repository: 'git://git.openstack.org/openstack/requirements',116 - {name: requirements,
117 branch: stable/juno}117 repository: 'git://git.openstack.org/openstack/requirements',
118 - {name: keystone,118 branch: master}
119 repository: 'git://git.openstack.org/openstack/keystone',119 - {name: keystone,
120 branch: stable/juno}"""120 repository: 'git://git.openstack.org/openstack/keystone',
121 branch: master}
122"""
121123
122# Mock python-dnspython resolver used by get_host_ip()124# Mock python-dnspython resolver used by get_host_ip()
123125
@@ -405,9 +407,16 @@
405 )407 )
406408
407 @patch.object(openstack, 'get_os_codename_package')409 @patch.object(openstack, 'get_os_codename_package')
408 def test_os_release_uncached(self, get_cn):410 @patch.object(openstack, 'git_os_codename_install_source')
411 @patch('charmhelpers.contrib.openstack.utils.config')
412 def test_os_release_uncached(self, config, git_cn, get_cn):
409 openstack.os_rel = None413 openstack.os_rel = None
410 get_cn.return_value = 'folsom'414 get_cn.return_value = 'folsom'
415 git_cn.return_value = None
416
417 # openstack-origin-git=None
418 config.side_effect = [None]
419
411 self.assertEquals('folsom', openstack.os_release('nova-common'))420 self.assertEquals('folsom', openstack.os_release('nova-common'))
412421
413 def test_os_release_cached(self):422 def test_os_release_cached(self):
@@ -744,29 +753,32 @@
744 repostories:753 repostories:
745 - {name: requirements,754 - {name: requirements,
746 repository: 'git://git.openstack.org/openstack/requirements',755 repository: 'git://git.openstack.org/openstack/requirements',
747 branch: stable/juno}756 branch: master}
748 - {name: keystone,757 - {name: keystone,
749 repository: 'git://git.openstack.org/openstack/keystone',758 repository: 'git://git.openstack.org/openstack/keystone',
750 branch: stable/juno}"""759 branch: master}
760 release: master"""
751 self._test_key_error(git_missing_repos, 'repositories', error_out)761 self._test_key_error(git_missing_repos, 'repositories', error_out)
752762
753 git_missing_name = """763 git_missing_name = """
754 repositories:764 repositories:
755 - {name: requirements,765 - {name: requirements,
756 repository: 'git://git.openstack.org/openstack/requirements',766 repository: 'git://git.openstack.org/openstack/requirements',
757 branch: stable/juno}767 branch: master}
758 - {repository: 'git://git.openstack.org/openstack/keystone',768 - {repository: 'git://git.openstack.org/openstack/keystone',
759 branch: stable/juno}"""769 branch: master}
770 release: master"""
760 self._test_key_error(git_missing_name, 'name', error_out)771 self._test_key_error(git_missing_name, 'name', error_out)
761772
762 git_missing_repo = """773 git_missing_repo = """
763 repositories:774 repositories:
764 - {name: requirements,775 - {name: requirements,
765 repoistroy: 'git://git.openstack.org/openstack/requirements',776 repoistroy: 'git://git.openstack.org/openstack/requirements',
766 branch: stable/juno}777 branch: master}
767 - {name: keystone,778 - {name: keystone,
768 repository: 'git://git.openstack.org/openstack/keystone',779 repository: 'git://git.openstack.org/openstack/keystone',
769 branch: stable/juno}"""780 branch: master}
781 release: master"""
770 self._test_key_error(git_missing_repo, 'repository', error_out)782 self._test_key_error(git_missing_repo, 'repository', error_out)
771783
772 git_missing_branch = """784 git_missing_branch = """
@@ -775,17 +787,19 @@
775 repository: 'git://git.openstack.org/openstack/requirements'}787 repository: 'git://git.openstack.org/openstack/requirements'}
776 - {name: keystone,788 - {name: keystone,
777 repository: 'git://git.openstack.org/openstack/keystone',789 repository: 'git://git.openstack.org/openstack/keystone',
778 branch: stable/juno}"""790 branch: master}
791 release: master"""
779 self._test_key_error(git_missing_branch, 'branch', error_out)792 self._test_key_error(git_missing_branch, 'branch', error_out)
780793
781 git_wrong_order_1 = """794 git_wrong_order_1 = """
782 repositories:795 repositories:
783 - {name: keystone,796 - {name: keystone,
784 repository: 'git://git.openstack.org/openstack/keystone',797 repository: 'git://git.openstack.org/openstack/keystone',
785 branch: stable/juno}798 branch: master}
786 - {name: requirements,799 - {name: requirements,
787 repository: 'git://git.openstack.org/openstack/requirements',800 repository: 'git://git.openstack.org/openstack/requirements',
788 branch: stable/juno}"""801 branch: master}
802 release: master"""
789 openstack.git_clone_and_install(git_wrong_order_1, 'keystone')803 openstack.git_clone_and_install(git_wrong_order_1, 'keystone')
790 error_out.assert_called_with(804 error_out.assert_called_with(
791 'keystone git repo must be specified last')805 'keystone git repo must be specified last')
@@ -794,7 +808,8 @@
794 repositories:808 repositories:
795 - {name: keystone,809 - {name: keystone,
796 repository: 'git://git.openstack.org/openstack/keystone',810 repository: 'git://git.openstack.org/openstack/keystone',
797 branch: stable/juno}"""811 branch: master}
812 release: master"""
798 openstack.git_clone_and_install(git_wrong_order_2, 'keystone')813 openstack.git_clone_and_install(git_wrong_order_2, 'keystone')
799 error_out.assert_called_with(814 error_out.assert_called_with(
800 'requirements git repo must be specified first')815 'requirements git repo must be specified first')
@@ -822,10 +837,10 @@
822 self.assertTrue(_git_install_single.call_count == 2)837 self.assertTrue(_git_install_single.call_count == 2)
823 expected = [838 expected = [
824 call('git://git.openstack.org/openstack/requirements',839 call('git://git.openstack.org/openstack/requirements',
825 'stable/juno', '1', '/mnt/openstack-git', None,840 'master', '1', '/mnt/openstack-git', None,
826 update_requirements=False),841 update_requirements=False),
827 call('git://git.openstack.org/openstack/keystone',842 call('git://git.openstack.org/openstack/keystone',
828 'stable/juno', '1', '/mnt/openstack-git', None,843 'master', '1', '/mnt/openstack-git', None,
829 update_requirements=True, constraints=None)844 update_requirements=True, constraints=None)
830 ]845 ]
831 self.assertEquals(expected, _git_install_single.call_args_list)846 self.assertEquals(expected, _git_install_single.call_args_list)

Subscribers

People subscribed via source and target branches