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
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 }
6
7 GIT_DEFAULT_BRANCHES = {
8- 'kilo': 'stable/kilo',
9 'liberty': 'stable/liberty',
10 'mitaka': 'stable/mitaka',
11 'master': 'master',
12@@ -413,7 +412,8 @@
13 global os_rel
14 if os_rel:
15 return os_rel
16- os_rel = (get_os_codename_package(package, fatal=False) or
17+ os_rel = (git_os_codename_install_source(config('openstack-origin-git')) or
18+ get_os_codename_package(package, fatal=False) or
19 get_os_codename_install_source(config('openstack-origin')) or
20 base)
21 return os_rel
22@@ -719,7 +719,24 @@
23 return config('openstack-origin-git') is not None
24
25
26-requirements_dir = None
27+def git_os_codename_install_source(projects_yaml):
28+ """
29+ Returns OpenStack codename of release being installed from source.
30+ """
31+ if git_install_requested():
32+ projects = _git_yaml_load(projects_yaml)
33+
34+ if projects in GIT_DEFAULT_BRANCHES.keys():
35+ if projects == 'master':
36+ return 'newton'
37+ return projects
38+
39+ if 'release' in projects:
40+ if projects['release'] == 'master':
41+ return 'newton'
42+ return projects['release']
43+
44+ return None
45
46
47 def git_default_repos(projects_yaml):
48@@ -740,12 +757,6 @@
49 }
50 repos = [repo]
51
52- # NOTE(coreycb): This is a temp work-around until the requirements
53- # repo moves from stable/kilo branch to kilo-eol tag. The core
54- # repos have already done this.
55- if default == 'kilo':
56- branch = 'kilo-eol'
57-
58 # neutron-* and nova-* charms require some additional repos
59 if service in ['neutron-api', 'neutron-gateway',
60 'neutron-openvswitch']:
61@@ -778,7 +789,7 @@
62 }
63 repos.append(repo)
64
65- return yaml.dump(dict(repositories=repos))
66+ return yaml.dump(dict(repositories=repos, release=default))
67
68 return projects_yaml
69
70@@ -793,6 +804,9 @@
71 return yaml.load(projects_yaml)
72
73
74+requirements_dir = None
75+
76+
77 def git_clone_and_install(projects_yaml, core_project):
78 """
79 Clone/install all specified OpenStack repositories.
80@@ -856,6 +870,10 @@
81 # upper-constraints didn't exist until after icehouse
82 if not os.path.isfile(constraints):
83 constraints = None
84+ # use constraints unless project yaml sets use_constraints to false
85+ if 'use_constraints' in projects.keys():
86+ if not projects['use_constraints']:
87+ constraints = None
88 else:
89 repo_dir = _git_clone_and_install_single(repo, branch, depth,
90 parent_dir, http_proxy,
91@@ -882,6 +900,8 @@
92 if projects['repositories'][-1]['name'] != core_project:
93 error_out('{} git repo must be specified last'.format(core_project))
94
95+ _git_ensure_key_exists('release', projects)
96+
97
98 def _git_ensure_key_exists(key, keys):
99 """
100
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 ('cloud:precise-icehouse/updates', url + ' precise-updates/icehouse main'),
106 ]
107
108-openstack_origin_git = \
109- """repositories:
110- - {name: requirements,
111- repository: 'git://git.openstack.org/openstack/requirements',
112- branch: stable/juno}
113- - {name: keystone,
114- repository: 'git://git.openstack.org/openstack/keystone',
115- branch: stable/juno}"""
116+openstack_origin_git = """
117+ release: master
118+ repositories:
119+ - {name: requirements,
120+ repository: 'git://git.openstack.org/openstack/requirements',
121+ branch: master}
122+ - {name: keystone,
123+ repository: 'git://git.openstack.org/openstack/keystone',
124+ branch: master}
125+"""
126
127 # Mock python-dnspython resolver used by get_host_ip()
128
129@@ -405,9 +407,16 @@
130 )
131
132 @patch.object(openstack, 'get_os_codename_package')
133- def test_os_release_uncached(self, get_cn):
134+ @patch.object(openstack, 'git_os_codename_install_source')
135+ @patch('charmhelpers.contrib.openstack.utils.config')
136+ def test_os_release_uncached(self, config, git_cn, get_cn):
137 openstack.os_rel = None
138 get_cn.return_value = 'folsom'
139+ git_cn.return_value = None
140+
141+ # openstack-origin-git=None
142+ config.side_effect = [None]
143+
144 self.assertEquals('folsom', openstack.os_release('nova-common'))
145
146 def test_os_release_cached(self):
147@@ -744,29 +753,32 @@
148 repostories:
149 - {name: requirements,
150 repository: 'git://git.openstack.org/openstack/requirements',
151- branch: stable/juno}
152+ branch: master}
153 - {name: keystone,
154 repository: 'git://git.openstack.org/openstack/keystone',
155- branch: stable/juno}"""
156+ branch: master}
157+ release: master"""
158 self._test_key_error(git_missing_repos, 'repositories', error_out)
159
160 git_missing_name = """
161 repositories:
162 - {name: requirements,
163 repository: 'git://git.openstack.org/openstack/requirements',
164- branch: stable/juno}
165+ branch: master}
166 - {repository: 'git://git.openstack.org/openstack/keystone',
167- branch: stable/juno}"""
168+ branch: master}
169+ release: master"""
170 self._test_key_error(git_missing_name, 'name', error_out)
171
172 git_missing_repo = """
173 repositories:
174 - {name: requirements,
175 repoistroy: 'git://git.openstack.org/openstack/requirements',
176- branch: stable/juno}
177+ branch: master}
178 - {name: keystone,
179 repository: 'git://git.openstack.org/openstack/keystone',
180- branch: stable/juno}"""
181+ branch: master}
182+ release: master"""
183 self._test_key_error(git_missing_repo, 'repository', error_out)
184
185 git_missing_branch = """
186@@ -775,17 +787,19 @@
187 repository: 'git://git.openstack.org/openstack/requirements'}
188 - {name: keystone,
189 repository: 'git://git.openstack.org/openstack/keystone',
190- branch: stable/juno}"""
191+ branch: master}
192+ release: master"""
193 self._test_key_error(git_missing_branch, 'branch', error_out)
194
195 git_wrong_order_1 = """
196 repositories:
197 - {name: keystone,
198 repository: 'git://git.openstack.org/openstack/keystone',
199- branch: stable/juno}
200+ branch: master}
201 - {name: requirements,
202 repository: 'git://git.openstack.org/openstack/requirements',
203- branch: stable/juno}"""
204+ branch: master}
205+ release: master"""
206 openstack.git_clone_and_install(git_wrong_order_1, 'keystone')
207 error_out.assert_called_with(
208 'keystone git repo must be specified last')
209@@ -794,7 +808,8 @@
210 repositories:
211 - {name: keystone,
212 repository: 'git://git.openstack.org/openstack/keystone',
213- branch: stable/juno}"""
214+ branch: master}
215+ release: master"""
216 openstack.git_clone_and_install(git_wrong_order_2, 'keystone')
217 error_out.assert_called_with(
218 'requirements git repo must be specified first')
219@@ -822,10 +837,10 @@
220 self.assertTrue(_git_install_single.call_count == 2)
221 expected = [
222 call('git://git.openstack.org/openstack/requirements',
223- 'stable/juno', '1', '/mnt/openstack-git', None,
224+ 'master', '1', '/mnt/openstack-git', None,
225 update_requirements=False),
226 call('git://git.openstack.org/openstack/keystone',
227- 'stable/juno', '1', '/mnt/openstack-git', None,
228+ 'master', '1', '/mnt/openstack-git', None,
229 update_requirements=True, constraints=None)
230 ]
231 self.assertEquals(expected, _git_install_single.call_args_list)

Subscribers

People subscribed via source and target branches