Merge lp:~corey.bryant/charm-helpers/os-release-check-candidate into lp:charm-helpers
- os-release-check-candidate
- Merge into devel
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
James Page | Needs Fixing | ||
Review via email: mp+299598@code.launchpad.net |
Commit message
Description of the change
- 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.
- 606. By Corey Bryant
-
Switch yakkety typo to newton
Preview Diff
1 | === modified file 'charmhelpers/contrib/openstack/utils.py' | |||
2 | --- charmhelpers/contrib/openstack/utils.py 2016-07-06 14:41:05 +0000 | |||
3 | +++ charmhelpers/contrib/openstack/utils.py 2016-07-13 12:27:09 +0000 | |||
4 | @@ -220,7 +220,6 @@ | |||
5 | 220 | } | 220 | } |
6 | 221 | 221 | ||
7 | 222 | GIT_DEFAULT_BRANCHES = { | 222 | GIT_DEFAULT_BRANCHES = { |
8 | 223 | 'kilo': 'stable/kilo', | ||
9 | 224 | 'liberty': 'stable/liberty', | 223 | 'liberty': 'stable/liberty', |
10 | 225 | 'mitaka': 'stable/mitaka', | 224 | 'mitaka': 'stable/mitaka', |
11 | 226 | 'master': 'master', | 225 | 'master': 'master', |
12 | @@ -413,7 +412,8 @@ | |||
13 | 413 | global os_rel | 412 | global os_rel |
14 | 414 | if os_rel: | 413 | if os_rel: |
15 | 415 | return os_rel | 414 | return os_rel |
17 | 416 | os_rel = (get_os_codename_package(package, fatal=False) or | 415 | os_rel = (git_os_codename_install_source(config('openstack-origin-git')) or |
18 | 416 | get_os_codename_package(package, fatal=False) or | ||
19 | 417 | get_os_codename_install_source(config('openstack-origin')) or | 417 | get_os_codename_install_source(config('openstack-origin')) or |
20 | 418 | base) | 418 | base) |
21 | 419 | return os_rel | 419 | return os_rel |
22 | @@ -719,7 +719,24 @@ | |||
23 | 719 | return config('openstack-origin-git') is not None | 719 | return config('openstack-origin-git') is not None |
24 | 720 | 720 | ||
25 | 721 | 721 | ||
27 | 722 | requirements_dir = None | 722 | def git_os_codename_install_source(projects_yaml): |
28 | 723 | """ | ||
29 | 724 | Returns OpenStack codename of release being installed from source. | ||
30 | 725 | """ | ||
31 | 726 | if git_install_requested(): | ||
32 | 727 | projects = _git_yaml_load(projects_yaml) | ||
33 | 728 | |||
34 | 729 | if projects in GIT_DEFAULT_BRANCHES.keys(): | ||
35 | 730 | if projects == 'master': | ||
36 | 731 | return 'newton' | ||
37 | 732 | return projects | ||
38 | 733 | |||
39 | 734 | if 'release' in projects: | ||
40 | 735 | if projects['release'] == 'master': | ||
41 | 736 | return 'newton' | ||
42 | 737 | return projects['release'] | ||
43 | 738 | |||
44 | 739 | return None | ||
45 | 723 | 740 | ||
46 | 724 | 741 | ||
47 | 725 | def git_default_repos(projects_yaml): | 742 | def git_default_repos(projects_yaml): |
48 | @@ -740,12 +757,6 @@ | |||
49 | 740 | } | 757 | } |
50 | 741 | repos = [repo] | 758 | repos = [repo] |
51 | 742 | 759 | ||
52 | 743 | # NOTE(coreycb): This is a temp work-around until the requirements | ||
53 | 744 | # repo moves from stable/kilo branch to kilo-eol tag. The core | ||
54 | 745 | # repos have already done this. | ||
55 | 746 | if default == 'kilo': | ||
56 | 747 | branch = 'kilo-eol' | ||
57 | 748 | |||
58 | 749 | # neutron-* and nova-* charms require some additional repos | 760 | # neutron-* and nova-* charms require some additional repos |
59 | 750 | if service in ['neutron-api', 'neutron-gateway', | 761 | if service in ['neutron-api', 'neutron-gateway', |
60 | 751 | 'neutron-openvswitch']: | 762 | 'neutron-openvswitch']: |
61 | @@ -778,7 +789,7 @@ | |||
62 | 778 | } | 789 | } |
63 | 779 | repos.append(repo) | 790 | repos.append(repo) |
64 | 780 | 791 | ||
66 | 781 | return yaml.dump(dict(repositories=repos)) | 792 | return yaml.dump(dict(repositories=repos, release=default)) |
67 | 782 | 793 | ||
68 | 783 | return projects_yaml | 794 | return projects_yaml |
69 | 784 | 795 | ||
70 | @@ -793,6 +804,9 @@ | |||
71 | 793 | return yaml.load(projects_yaml) | 804 | return yaml.load(projects_yaml) |
72 | 794 | 805 | ||
73 | 795 | 806 | ||
74 | 807 | requirements_dir = None | ||
75 | 808 | |||
76 | 809 | |||
77 | 796 | def git_clone_and_install(projects_yaml, core_project): | 810 | def git_clone_and_install(projects_yaml, core_project): |
78 | 797 | """ | 811 | """ |
79 | 798 | Clone/install all specified OpenStack repositories. | 812 | Clone/install all specified OpenStack repositories. |
80 | @@ -856,6 +870,10 @@ | |||
81 | 856 | # upper-constraints didn't exist until after icehouse | 870 | # upper-constraints didn't exist until after icehouse |
82 | 857 | if not os.path.isfile(constraints): | 871 | if not os.path.isfile(constraints): |
83 | 858 | constraints = None | 872 | constraints = None |
84 | 873 | # use constraints unless project yaml sets use_constraints to false | ||
85 | 874 | if 'use_constraints' in projects.keys(): | ||
86 | 875 | if not projects['use_constraints']: | ||
87 | 876 | constraints = None | ||
88 | 859 | else: | 877 | else: |
89 | 860 | repo_dir = _git_clone_and_install_single(repo, branch, depth, | 878 | repo_dir = _git_clone_and_install_single(repo, branch, depth, |
90 | 861 | parent_dir, http_proxy, | 879 | parent_dir, http_proxy, |
91 | @@ -882,6 +900,8 @@ | |||
92 | 882 | if projects['repositories'][-1]['name'] != core_project: | 900 | if projects['repositories'][-1]['name'] != core_project: |
93 | 883 | error_out('{} git repo must be specified last'.format(core_project)) | 901 | error_out('{} git repo must be specified last'.format(core_project)) |
94 | 884 | 902 | ||
95 | 903 | _git_ensure_key_exists('release', projects) | ||
96 | 904 | |||
97 | 885 | 905 | ||
98 | 886 | def _git_ensure_key_exists(key, keys): | 906 | def _git_ensure_key_exists(key, keys): |
99 | 887 | """ | 907 | """ |
100 | 888 | 908 | ||
101 | === modified file 'tests/contrib/openstack/test_openstack_utils.py' | |||
102 | --- tests/contrib/openstack/test_openstack_utils.py 2016-06-30 12:41:13 +0000 | |||
103 | +++ tests/contrib/openstack/test_openstack_utils.py 2016-07-13 12:27:09 +0000 | |||
104 | @@ -110,14 +110,16 @@ | |||
105 | 110 | ('cloud:precise-icehouse/updates', url + ' precise-updates/icehouse main'), | 110 | ('cloud:precise-icehouse/updates', url + ' precise-updates/icehouse main'), |
106 | 111 | ] | 111 | ] |
107 | 112 | 112 | ||
116 | 113 | openstack_origin_git = \ | 113 | openstack_origin_git = """ |
117 | 114 | """repositories: | 114 | release: master |
118 | 115 | - {name: requirements, | 115 | repositories: |
119 | 116 | repository: 'git://git.openstack.org/openstack/requirements', | 116 | - {name: requirements, |
120 | 117 | branch: stable/juno} | 117 | repository: 'git://git.openstack.org/openstack/requirements', |
121 | 118 | - {name: keystone, | 118 | branch: master} |
122 | 119 | repository: 'git://git.openstack.org/openstack/keystone', | 119 | - {name: keystone, |
123 | 120 | branch: stable/juno}""" | 120 | repository: 'git://git.openstack.org/openstack/keystone', |
124 | 121 | branch: master} | ||
125 | 122 | """ | ||
126 | 121 | 123 | ||
127 | 122 | # Mock python-dnspython resolver used by get_host_ip() | 124 | # Mock python-dnspython resolver used by get_host_ip() |
128 | 123 | 125 | ||
129 | @@ -405,9 +407,16 @@ | |||
130 | 405 | ) | 407 | ) |
131 | 406 | 408 | ||
132 | 407 | @patch.object(openstack, 'get_os_codename_package') | 409 | @patch.object(openstack, 'get_os_codename_package') |
134 | 408 | def test_os_release_uncached(self, get_cn): | 410 | @patch.object(openstack, 'git_os_codename_install_source') |
135 | 411 | @patch('charmhelpers.contrib.openstack.utils.config') | ||
136 | 412 | def test_os_release_uncached(self, config, git_cn, get_cn): | ||
137 | 409 | openstack.os_rel = None | 413 | openstack.os_rel = None |
138 | 410 | get_cn.return_value = 'folsom' | 414 | get_cn.return_value = 'folsom' |
139 | 415 | git_cn.return_value = None | ||
140 | 416 | |||
141 | 417 | # openstack-origin-git=None | ||
142 | 418 | config.side_effect = [None] | ||
143 | 419 | |||
144 | 411 | self.assertEquals('folsom', openstack.os_release('nova-common')) | 420 | self.assertEquals('folsom', openstack.os_release('nova-common')) |
145 | 412 | 421 | ||
146 | 413 | def test_os_release_cached(self): | 422 | def test_os_release_cached(self): |
147 | @@ -744,29 +753,32 @@ | |||
148 | 744 | repostories: | 753 | repostories: |
149 | 745 | - {name: requirements, | 754 | - {name: requirements, |
150 | 746 | repository: 'git://git.openstack.org/openstack/requirements', | 755 | repository: 'git://git.openstack.org/openstack/requirements', |
152 | 747 | branch: stable/juno} | 756 | branch: master} |
153 | 748 | - {name: keystone, | 757 | - {name: keystone, |
154 | 749 | repository: 'git://git.openstack.org/openstack/keystone', | 758 | repository: 'git://git.openstack.org/openstack/keystone', |
156 | 750 | branch: stable/juno}""" | 759 | branch: master} |
157 | 760 | release: master""" | ||
158 | 751 | self._test_key_error(git_missing_repos, 'repositories', error_out) | 761 | self._test_key_error(git_missing_repos, 'repositories', error_out) |
159 | 752 | 762 | ||
160 | 753 | git_missing_name = """ | 763 | git_missing_name = """ |
161 | 754 | repositories: | 764 | repositories: |
162 | 755 | - {name: requirements, | 765 | - {name: requirements, |
163 | 756 | repository: 'git://git.openstack.org/openstack/requirements', | 766 | repository: 'git://git.openstack.org/openstack/requirements', |
165 | 757 | branch: stable/juno} | 767 | branch: master} |
166 | 758 | - {repository: 'git://git.openstack.org/openstack/keystone', | 768 | - {repository: 'git://git.openstack.org/openstack/keystone', |
168 | 759 | branch: stable/juno}""" | 769 | branch: master} |
169 | 770 | release: master""" | ||
170 | 760 | self._test_key_error(git_missing_name, 'name', error_out) | 771 | self._test_key_error(git_missing_name, 'name', error_out) |
171 | 761 | 772 | ||
172 | 762 | git_missing_repo = """ | 773 | git_missing_repo = """ |
173 | 763 | repositories: | 774 | repositories: |
174 | 764 | - {name: requirements, | 775 | - {name: requirements, |
175 | 765 | repoistroy: 'git://git.openstack.org/openstack/requirements', | 776 | repoistroy: 'git://git.openstack.org/openstack/requirements', |
177 | 766 | branch: stable/juno} | 777 | branch: master} |
178 | 767 | - {name: keystone, | 778 | - {name: keystone, |
179 | 768 | repository: 'git://git.openstack.org/openstack/keystone', | 779 | repository: 'git://git.openstack.org/openstack/keystone', |
181 | 769 | branch: stable/juno}""" | 780 | branch: master} |
182 | 781 | release: master""" | ||
183 | 770 | self._test_key_error(git_missing_repo, 'repository', error_out) | 782 | self._test_key_error(git_missing_repo, 'repository', error_out) |
184 | 771 | 783 | ||
185 | 772 | git_missing_branch = """ | 784 | git_missing_branch = """ |
186 | @@ -775,17 +787,19 @@ | |||
187 | 775 | repository: 'git://git.openstack.org/openstack/requirements'} | 787 | repository: 'git://git.openstack.org/openstack/requirements'} |
188 | 776 | - {name: keystone, | 788 | - {name: keystone, |
189 | 777 | repository: 'git://git.openstack.org/openstack/keystone', | 789 | repository: 'git://git.openstack.org/openstack/keystone', |
191 | 778 | branch: stable/juno}""" | 790 | branch: master} |
192 | 791 | release: master""" | ||
193 | 779 | self._test_key_error(git_missing_branch, 'branch', error_out) | 792 | self._test_key_error(git_missing_branch, 'branch', error_out) |
194 | 780 | 793 | ||
195 | 781 | git_wrong_order_1 = """ | 794 | git_wrong_order_1 = """ |
196 | 782 | repositories: | 795 | repositories: |
197 | 783 | - {name: keystone, | 796 | - {name: keystone, |
198 | 784 | repository: 'git://git.openstack.org/openstack/keystone', | 797 | repository: 'git://git.openstack.org/openstack/keystone', |
200 | 785 | branch: stable/juno} | 798 | branch: master} |
201 | 786 | - {name: requirements, | 799 | - {name: requirements, |
202 | 787 | repository: 'git://git.openstack.org/openstack/requirements', | 800 | repository: 'git://git.openstack.org/openstack/requirements', |
204 | 788 | branch: stable/juno}""" | 801 | branch: master} |
205 | 802 | release: master""" | ||
206 | 789 | openstack.git_clone_and_install(git_wrong_order_1, 'keystone') | 803 | openstack.git_clone_and_install(git_wrong_order_1, 'keystone') |
207 | 790 | error_out.assert_called_with( | 804 | error_out.assert_called_with( |
208 | 791 | 'keystone git repo must be specified last') | 805 | 'keystone git repo must be specified last') |
209 | @@ -794,7 +808,8 @@ | |||
210 | 794 | repositories: | 808 | repositories: |
211 | 795 | - {name: keystone, | 809 | - {name: keystone, |
212 | 796 | repository: 'git://git.openstack.org/openstack/keystone', | 810 | repository: 'git://git.openstack.org/openstack/keystone', |
214 | 797 | branch: stable/juno}""" | 811 | branch: master} |
215 | 812 | release: master""" | ||
216 | 798 | openstack.git_clone_and_install(git_wrong_order_2, 'keystone') | 813 | openstack.git_clone_and_install(git_wrong_order_2, 'keystone') |
217 | 799 | error_out.assert_called_with( | 814 | error_out.assert_called_with( |
218 | 800 | 'requirements git repo must be specified first') | 815 | 'requirements git repo must be specified first') |
219 | @@ -822,10 +837,10 @@ | |||
220 | 822 | self.assertTrue(_git_install_single.call_count == 2) | 837 | self.assertTrue(_git_install_single.call_count == 2) |
221 | 823 | expected = [ | 838 | expected = [ |
222 | 824 | call('git://git.openstack.org/openstack/requirements', | 839 | call('git://git.openstack.org/openstack/requirements', |
224 | 825 | 'stable/juno', '1', '/mnt/openstack-git', None, | 840 | 'master', '1', '/mnt/openstack-git', None, |
225 | 826 | update_requirements=False), | 841 | update_requirements=False), |
226 | 827 | call('git://git.openstack.org/openstack/keystone', | 842 | call('git://git.openstack.org/openstack/keystone', |
228 | 828 | 'stable/juno', '1', '/mnt/openstack-git', None, | 843 | 'master', '1', '/mnt/openstack-git', None, |
229 | 829 | update_requirements=True, constraints=None) | 844 | update_requirements=True, constraints=None) |
230 | 830 | ] | 845 | ] |
231 | 831 | self.assertEquals(expected, _git_install_single.call_args_list) | 846 | self.assertEquals(expected, _git_install_single.call_args_list) |
Two comments - I think yakkety/newton is mixed up a bit.