Merge lp:~corey.bryant/charms/trusty/openstack-dashboard/git-ods into lp:~openstack-charmers-archive/charms/trusty/openstack-dashboard/next
- Trusty Tahr (14.04)
- git-ods
- Merge into next
Status: | Merged |
---|---|
Merged at revision: | 66 |
Proposed branch: | lp:~corey.bryant/charms/trusty/openstack-dashboard/git-ods |
Merge into: | lp:~openstack-charmers-archive/charms/trusty/openstack-dashboard/next |
Diff against target: |
456 lines (+144/-48) 8 files modified
hooks/charmhelpers/contrib/openstack/utils.py (+65/-18) hooks/charmhelpers/contrib/python/packages.py (+28/-5) hooks/charmhelpers/fetch/giturl.py (+7/-5) hooks/horizon_hooks.py (+1/-1) hooks/horizon_utils.py (+39/-14) templates/git/dashboard.conf (+1/-0) tests/basic_deployment.py (+2/-2) unit_tests/test_horizon_utils.py (+1/-3) |
To merge this branch: | bzr merge lp:~corey.bryant/charms/trusty/openstack-dashboard/git-ods |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
OpenStack Charmers | Pending | ||
Review via email: mp+257192@code.launchpad.net |
Commit message
Adds support to:
* Use a Python virtualenv when deploying from source
* Default to shallow clone for git (depth=1)
* Pass http_proxy to pip installs if specified
Description of the change
uosci-testing-bot (uosci-testing-bot) wrote : | # |
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #3612 openstack-
UNIT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_amulet_test #3611 openstack-
AMULET FAIL: amulet-test failed
AMULET Results (max last 2 lines):
make: *** [test] Error 1
ERROR:root:Make target returned non-zero.
Full amulet test output: http://
Build: http://
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_amulet_test #3617 openstack-
AMULET OK: passed
Build: http://
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_lint_check #3869 openstack-
LINT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #3656 openstack-
UNIT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_lint_check #3878 openstack-
LINT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #3665 openstack-
UNIT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_lint_check #3908 openstack-
LINT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #3695 openstack-
UNIT OK: passed
- 101. By Corey Bryant
-
Sync charm-helpers
- 102. By Corey Bryant
-
Sync charm-helpers
- 103. By Corey Bryant
-
Sync charm-helpers
- 104. By Corey Bryant
-
Clone from github in deploy from source amulet tests
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_lint_check #4468 openstack-
LINT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #4193 openstack-
UNIT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_amulet_test #4091 openstack-
AMULET FAIL: amulet-test failed
AMULET Results (max last 2 lines):
make: *** [test] Error 1
ERROR:root:Make target returned non-zero.
Full amulet test output: http://
Build: http://
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_lint_check #4530 openstack-
LINT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #4255 openstack-
UNIT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_amulet_test #4109 openstack-
AMULET OK: passed
Build: http://
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_lint_check #4538 openstack-
LINT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #4263 openstack-
UNIT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_amulet_test #4117 openstack-
AMULET OK: passed
Build: http://
- 105. By Corey Bryant
-
Sync charm-helpers
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_lint_check #4842 openstack-
LINT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_unit_test #4522 openstack-
UNIT OK: passed
uosci-testing-bot (uosci-testing-bot) wrote : | # |
charm_amulet_test #4333 openstack-
AMULET OK: passed
Build: http://
Preview Diff
1 | === modified file 'hooks/charmhelpers/contrib/openstack/utils.py' |
2 | --- hooks/charmhelpers/contrib/openstack/utils.py 2015-04-16 20:24:28 +0000 |
3 | +++ hooks/charmhelpers/contrib/openstack/utils.py 2015-05-27 13:07:24 +0000 |
4 | @@ -53,9 +53,13 @@ |
5 | get_ipv6_addr |
6 | ) |
7 | |
8 | +from charmhelpers.contrib.python.packages import ( |
9 | + pip_create_virtualenv, |
10 | + pip_install, |
11 | +) |
12 | + |
13 | from charmhelpers.core.host import lsb_release, mounts, umount |
14 | from charmhelpers.fetch import apt_install, apt_cache, install_remote |
15 | -from charmhelpers.contrib.python.packages import pip_install |
16 | from charmhelpers.contrib.storage.linux.utils import is_block_device, zap_disk |
17 | from charmhelpers.contrib.storage.linux.loopback import ensure_loopback_device |
18 | |
19 | @@ -497,7 +501,17 @@ |
20 | requirements_dir = None |
21 | |
22 | |
23 | -def git_clone_and_install(projects_yaml, core_project): |
24 | +def _git_yaml_load(projects_yaml): |
25 | + """ |
26 | + Load the specified yaml into a dictionary. |
27 | + """ |
28 | + if not projects_yaml: |
29 | + return None |
30 | + |
31 | + return yaml.load(projects_yaml) |
32 | + |
33 | + |
34 | +def git_clone_and_install(projects_yaml, core_project, depth=1): |
35 | """ |
36 | Clone/install all specified OpenStack repositories. |
37 | |
38 | @@ -510,23 +524,22 @@ |
39 | repository: 'git://git.openstack.org/openstack/requirements.git', |
40 | branch: 'stable/icehouse'} |
41 | directory: /mnt/openstack-git |
42 | - http_proxy: http://squid.internal:3128 |
43 | - https_proxy: https://squid.internal:3128 |
44 | + http_proxy: squid-proxy-url |
45 | + https_proxy: squid-proxy-url |
46 | |
47 | The directory, http_proxy, and https_proxy keys are optional. |
48 | """ |
49 | global requirements_dir |
50 | parent_dir = '/mnt/openstack-git' |
51 | - |
52 | - if not projects_yaml: |
53 | - return |
54 | - |
55 | - projects = yaml.load(projects_yaml) |
56 | + http_proxy = None |
57 | + |
58 | + projects = _git_yaml_load(projects_yaml) |
59 | _git_validate_projects_yaml(projects, core_project) |
60 | |
61 | old_environ = dict(os.environ) |
62 | |
63 | if 'http_proxy' in projects.keys(): |
64 | + http_proxy = projects['http_proxy'] |
65 | os.environ['http_proxy'] = projects['http_proxy'] |
66 | if 'https_proxy' in projects.keys(): |
67 | os.environ['https_proxy'] = projects['https_proxy'] |
68 | @@ -534,15 +547,19 @@ |
69 | if 'directory' in projects.keys(): |
70 | parent_dir = projects['directory'] |
71 | |
72 | + pip_create_virtualenv(os.path.join(parent_dir, 'venv')) |
73 | + |
74 | for p in projects['repositories']: |
75 | repo = p['repository'] |
76 | branch = p['branch'] |
77 | if p['name'] == 'requirements': |
78 | - repo_dir = _git_clone_and_install_single(repo, branch, parent_dir, |
79 | + repo_dir = _git_clone_and_install_single(repo, branch, depth, |
80 | + parent_dir, http_proxy, |
81 | update_requirements=False) |
82 | requirements_dir = repo_dir |
83 | else: |
84 | - repo_dir = _git_clone_and_install_single(repo, branch, parent_dir, |
85 | + repo_dir = _git_clone_and_install_single(repo, branch, depth, |
86 | + parent_dir, http_proxy, |
87 | update_requirements=True) |
88 | |
89 | os.environ = old_environ |
90 | @@ -574,7 +591,8 @@ |
91 | error_out('openstack-origin-git key \'{}\' is missing'.format(key)) |
92 | |
93 | |
94 | -def _git_clone_and_install_single(repo, branch, parent_dir, update_requirements): |
95 | +def _git_clone_and_install_single(repo, branch, depth, parent_dir, http_proxy, |
96 | + update_requirements): |
97 | """ |
98 | Clone and install a single git repository. |
99 | """ |
100 | @@ -587,7 +605,8 @@ |
101 | |
102 | if not os.path.exists(dest_dir): |
103 | juju_log('Cloning git repo: {}, branch: {}'.format(repo, branch)) |
104 | - repo_dir = install_remote(repo, dest=parent_dir, branch=branch) |
105 | + repo_dir = install_remote(repo, dest=parent_dir, branch=branch, |
106 | + depth=depth) |
107 | else: |
108 | repo_dir = dest_dir |
109 | |
110 | @@ -598,7 +617,12 @@ |
111 | _git_update_requirements(repo_dir, requirements_dir) |
112 | |
113 | juju_log('Installing git repo from dir: {}'.format(repo_dir)) |
114 | - pip_install(repo_dir) |
115 | + if http_proxy: |
116 | + pip_install(repo_dir, proxy=http_proxy, |
117 | + venv=os.path.join(parent_dir, 'venv')) |
118 | + else: |
119 | + pip_install(repo_dir, |
120 | + venv=os.path.join(parent_dir, 'venv')) |
121 | |
122 | return repo_dir |
123 | |
124 | @@ -621,16 +645,27 @@ |
125 | os.chdir(orig_dir) |
126 | |
127 | |
128 | +def git_pip_venv_dir(projects_yaml): |
129 | + """ |
130 | + Return the pip virtualenv path. |
131 | + """ |
132 | + parent_dir = '/mnt/openstack-git' |
133 | + |
134 | + projects = _git_yaml_load(projects_yaml) |
135 | + |
136 | + if 'directory' in projects.keys(): |
137 | + parent_dir = projects['directory'] |
138 | + |
139 | + return os.path.join(parent_dir, 'venv') |
140 | + |
141 | + |
142 | def git_src_dir(projects_yaml, project): |
143 | """ |
144 | Return the directory where the specified project's source is located. |
145 | """ |
146 | parent_dir = '/mnt/openstack-git' |
147 | |
148 | - if not projects_yaml: |
149 | - return |
150 | - |
151 | - projects = yaml.load(projects_yaml) |
152 | + projects = _git_yaml_load(projects_yaml) |
153 | |
154 | if 'directory' in projects.keys(): |
155 | parent_dir = projects['directory'] |
156 | @@ -640,3 +675,15 @@ |
157 | return os.path.join(parent_dir, os.path.basename(p['repository'])) |
158 | |
159 | return None |
160 | + |
161 | + |
162 | +def git_yaml_value(projects_yaml, key): |
163 | + """ |
164 | + Return the value in projects_yaml for the specified key. |
165 | + """ |
166 | + projects = _git_yaml_load(projects_yaml) |
167 | + |
168 | + if key in projects.keys(): |
169 | + return projects[key] |
170 | + |
171 | + return None |
172 | |
173 | === modified file 'hooks/charmhelpers/contrib/python/packages.py' |
174 | --- hooks/charmhelpers/contrib/python/packages.py 2015-02-26 10:11:26 +0000 |
175 | +++ hooks/charmhelpers/contrib/python/packages.py 2015-05-27 13:07:24 +0000 |
176 | @@ -17,8 +17,11 @@ |
177 | # You should have received a copy of the GNU Lesser General Public License |
178 | # along with charm-helpers. If not, see <http://www.gnu.org/licenses/>. |
179 | |
180 | +import os |
181 | +import subprocess |
182 | + |
183 | from charmhelpers.fetch import apt_install, apt_update |
184 | -from charmhelpers.core.hookenv import log |
185 | +from charmhelpers.core.hookenv import charm_dir, log |
186 | |
187 | try: |
188 | from pip import main as pip_execute |
189 | @@ -51,11 +54,15 @@ |
190 | pip_execute(command) |
191 | |
192 | |
193 | -def pip_install(package, fatal=False, upgrade=False, **options): |
194 | +def pip_install(package, fatal=False, upgrade=False, venv=None, **options): |
195 | """Install a python package""" |
196 | - command = ["install"] |
197 | + if venv: |
198 | + venv_python = os.path.join(venv, 'bin/pip') |
199 | + command = [venv_python, "install"] |
200 | + else: |
201 | + command = ["install"] |
202 | |
203 | - available_options = ('proxy', 'src', 'log', "index-url", ) |
204 | + available_options = ('proxy', 'src', 'log', 'index-url', ) |
205 | for option in parse_options(options, available_options): |
206 | command.append(option) |
207 | |
208 | @@ -69,7 +76,10 @@ |
209 | |
210 | log("Installing {} package with options: {}".format(package, |
211 | command)) |
212 | - pip_execute(command) |
213 | + if venv: |
214 | + subprocess.check_call(command) |
215 | + else: |
216 | + pip_execute(command) |
217 | |
218 | |
219 | def pip_uninstall(package, **options): |
220 | @@ -94,3 +104,16 @@ |
221 | """Returns the list of current python installed packages |
222 | """ |
223 | return pip_execute(["list"]) |
224 | + |
225 | + |
226 | +def pip_create_virtualenv(path=None): |
227 | + """Create an isolated Python environment.""" |
228 | + apt_install('python-virtualenv') |
229 | + |
230 | + if path: |
231 | + venv_path = path |
232 | + else: |
233 | + venv_path = os.path.join(charm_dir(), 'venv') |
234 | + |
235 | + if not os.path.exists(venv_path): |
236 | + subprocess.check_call(['virtualenv', venv_path]) |
237 | |
238 | === modified file 'hooks/charmhelpers/fetch/giturl.py' |
239 | --- hooks/charmhelpers/fetch/giturl.py 2015-02-26 10:11:26 +0000 |
240 | +++ hooks/charmhelpers/fetch/giturl.py 2015-05-27 13:07:24 +0000 |
241 | @@ -45,14 +45,16 @@ |
242 | else: |
243 | return True |
244 | |
245 | - def clone(self, source, dest, branch): |
246 | + def clone(self, source, dest, branch, depth=None): |
247 | if not self.can_handle(source): |
248 | raise UnhandledSource("Cannot handle {}".format(source)) |
249 | |
250 | - repo = Repo.clone_from(source, dest) |
251 | - repo.git.checkout(branch) |
252 | + if depth: |
253 | + Repo.clone_from(source, dest, branch=branch, depth=depth) |
254 | + else: |
255 | + Repo.clone_from(source, dest, branch=branch) |
256 | |
257 | - def install(self, source, branch="master", dest=None): |
258 | + def install(self, source, branch="master", dest=None, depth=None): |
259 | url_parts = self.parse_url(source) |
260 | branch_name = url_parts.path.strip("/").split("/")[-1] |
261 | if dest: |
262 | @@ -63,7 +65,7 @@ |
263 | if not os.path.exists(dest_dir): |
264 | mkdir(dest_dir, perms=0o755) |
265 | try: |
266 | - self.clone(source, dest_dir, branch) |
267 | + self.clone(source, dest_dir, branch, depth) |
268 | except GitCommandError as e: |
269 | raise UnhandledSource(e.message) |
270 | except OSError as e: |
271 | |
272 | === modified file 'hooks/horizon_hooks.py' |
273 | --- hooks/horizon_hooks.py 2015-04-07 13:58:41 +0000 |
274 | +++ hooks/horizon_hooks.py 2015-05-27 13:07:24 +0000 |
275 | @@ -125,7 +125,7 @@ |
276 | open_port(443) |
277 | |
278 | if git_install_requested(): |
279 | - git_post_install_late() |
280 | + git_post_install_late(config('openstack-origin-git')) |
281 | |
282 | |
283 | @hooks.hook('identity-service-relation-joined') |
284 | |
285 | === modified file 'hooks/horizon_utils.py' |
286 | --- hooks/horizon_utils.py 2015-04-13 19:11:22 +0000 |
287 | +++ hooks/horizon_utils.py 2015-05-27 13:07:24 +0000 |
288 | @@ -17,9 +17,13 @@ |
289 | git_clone_and_install, |
290 | os_release, |
291 | git_src_dir, |
292 | + git_pip_venv_dir, |
293 | + git_yaml_value, |
294 | +) |
295 | +from charmhelpers.contrib.python.packages import ( |
296 | + pip_install, |
297 | ) |
298 | from charmhelpers.core.hookenv import ( |
299 | - charm_dir, |
300 | config, |
301 | log |
302 | ) |
303 | @@ -32,7 +36,9 @@ |
304 | mkdir, |
305 | service_restart, |
306 | ) |
307 | - |
308 | +from charmhelpers.core.templating import ( |
309 | + render, |
310 | +) |
311 | from charmhelpers.fetch import ( |
312 | apt_upgrade, |
313 | apt_update, |
314 | @@ -53,9 +59,14 @@ |
315 | BASE_GIT_PACKAGES = [ |
316 | 'apache2', |
317 | 'libapache2-mod-wsgi', |
318 | + 'libffi-dev', |
319 | + 'libpcre3-dev', |
320 | + 'libssl-dev', |
321 | 'libxml2-dev', |
322 | 'libxslt1-dev', |
323 | + 'libyaml-dev', |
324 | 'python-dev', |
325 | + 'python-lesscpy', |
326 | 'python-pip', |
327 | 'python-setuptools', |
328 | 'zlib1g-dev', |
329 | @@ -296,7 +307,6 @@ |
330 | def git_post_install(projects_yaml): |
331 | """Perform horizon post-install setup.""" |
332 | src_dir = git_src_dir(projects_yaml, 'horizon') |
333 | - templates_dir = os.path.join(charm_dir(), 'templates/git') |
334 | copy_files = { |
335 | 'manage': { |
336 | 'src': os.path.join(src_dir, 'manage.py'), |
337 | @@ -311,10 +321,6 @@ |
338 | 'local_settings.py.example'), |
339 | 'dest': '/etc/openstack-dashboard/local_settings.py', |
340 | }, |
341 | - 'openstack-dashboard': { |
342 | - 'src': os.path.join(templates_dir, 'dashboard.conf'), |
343 | - 'dest': '/etc/apache2/conf-available/openstack-dashboard.conf', |
344 | - }, |
345 | } |
346 | |
347 | for name, files in copy_files.iteritems(): |
348 | @@ -342,8 +348,8 @@ |
349 | 'link': '/usr/share/openstack-dashboard/bin/less/lessc'}, |
350 | {'src': '/etc/openstack-dashboard/local_settings.py', |
351 | 'link': os.path.join(share_dir, 'local/local_settings.py')}, |
352 | - {'src': |
353 | - '/usr/local/lib/python2.7/dist-packages/horizon/static/horizon/', |
354 | + {'src': os.path.join(git_pip_venv_dir(projects_yaml), |
355 | + 'local/lib/python2.7/site-packages/horizon/static/horizon/'), |
356 | 'link': os.path.join(share_dir, 'static/horizon')}, |
357 | ] |
358 | |
359 | @@ -352,12 +358,25 @@ |
360 | os.remove(s['link']) |
361 | os.symlink(s['src'], s['link']) |
362 | |
363 | + render('git/dashboard.conf', |
364 | + '/etc/apache2/conf-available/openstack-dashboard.conf', |
365 | + {'virtualenv': git_pip_venv_dir(projects_yaml)}, |
366 | + owner='root', group='root', perms=0o644) |
367 | + |
368 | os.chmod('/var/lib/openstack-dashboard', 0o750) |
369 | os.chmod('/usr/share/openstack-dashboard/manage.py', 0o755), |
370 | |
371 | - subprocess.check_call(['/usr/share/openstack-dashboard/manage.py', |
372 | + http_proxy = git_yaml_value(projects_yaml, 'http_proxy') |
373 | + if http_proxy: |
374 | + pip_install('python-memcached', proxy=http_proxy, |
375 | + venv=git_pip_venv_dir(projects_yaml)) |
376 | + else: |
377 | + pip_install('python-memcached', |
378 | + venv=git_pip_venv_dir(projects_yaml)) |
379 | + python = os.path.join(git_pip_venv_dir(projects_yaml), 'bin/python') |
380 | + subprocess.check_call([python, '/usr/share/openstack-dashboard/manage.py', |
381 | 'collectstatic', '--noinput']) |
382 | - subprocess.check_call(['/usr/share/openstack-dashboard/manage.py', |
383 | + subprocess.check_call([python, '/usr/share/openstack-dashboard/manage.py', |
384 | 'compress', '--force']) |
385 | |
386 | uid = pwd.getpwnam('horizon').pw_uid |
387 | @@ -379,9 +398,15 @@ |
388 | service_restart('apache2') |
389 | |
390 | |
391 | -def git_post_install_late(): |
392 | +def git_post_install_late(projects_yaml): |
393 | """Perform horizon post-install setup.""" |
394 | - subprocess.check_call(['/usr/share/openstack-dashboard/manage.py', |
395 | + render('git/dashboard.conf', |
396 | + '/etc/apache2/conf-available/openstack-dashboard.conf', |
397 | + {'virtualenv': git_pip_venv_dir(projects_yaml)}, |
398 | + owner='root', group='root', perms=0o644) |
399 | + |
400 | + python = os.path.join(git_pip_venv_dir(projects_yaml), 'bin/python') |
401 | + subprocess.check_call([python, '/usr/share/openstack-dashboard/manage.py', |
402 | 'collectstatic', '--noinput']) |
403 | - subprocess.check_call(['/usr/share/openstack-dashboard/manage.py', |
404 | + subprocess.check_call([python, '/usr/share/openstack-dashboard/manage.py', |
405 | 'compress', '--force']) |
406 | |
407 | === modified file 'templates/git/dashboard.conf' |
408 | --- templates/git/dashboard.conf 2015-04-13 14:18:45 +0000 |
409 | +++ templates/git/dashboard.conf 2015-05-27 13:07:24 +0000 |
410 | @@ -1,6 +1,7 @@ |
411 | WSGIScriptAlias /horizon /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi |
412 | WSGIDaemonProcess horizon user=horizon group=horizon processes=3 threads=10 |
413 | WSGIProcessGroup horizon |
414 | +WSGIPythonHome {{ virtualenv }} |
415 | Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static/ |
416 | <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi> |
417 | Order allow,deny |
418 | |
419 | === modified file 'tests/basic_deployment.py' |
420 | --- tests/basic_deployment.py 2015-04-15 19:31:27 +0000 |
421 | +++ tests/basic_deployment.py 2015-05-27 13:07:24 +0000 |
422 | @@ -64,10 +64,10 @@ |
423 | openstack_origin_git = { |
424 | 'repositories': [ |
425 | {'name': 'requirements', |
426 | - 'repository': 'git://git.openstack.org/openstack/requirements', |
427 | + 'repository': 'git://github.com/openstack/requirements', |
428 | 'branch': branch}, |
429 | {'name': 'horizon', |
430 | - 'repository': 'git://git.openstack.org/openstack/horizon', |
431 | + 'repository': 'git://github.com/openstack/horizon', |
432 | 'branch': branch}, |
433 | ], |
434 | 'directory': '/mnt/openstack-git', |
435 | |
436 | === modified file 'unit_tests/test_horizon_utils.py' |
437 | --- unit_tests/test_horizon_utils.py 2015-04-07 13:58:41 +0000 |
438 | +++ unit_tests/test_horizon_utils.py 2015-05-27 13:07:24 +0000 |
439 | @@ -192,7 +192,6 @@ |
440 | |
441 | @patch.object(horizon_utils, 'git_src_dir') |
442 | @patch.object(horizon_utils, 'service_restart') |
443 | - @patch.object(horizon_utils, 'charm_dir') |
444 | @patch('shutil.copyfile') |
445 | @patch('shutil.copytree') |
446 | @patch('os.path.join') |
447 | @@ -207,8 +206,7 @@ |
448 | @patch('grp.getgrnam') |
449 | def test_git_post_install(self, grnam, pwnam, check_call, walk, lchown, |
450 | chown, chmod, symlink, exists, join, copytree, |
451 | - copyfile, charm_dir, service_restart, |
452 | - git_src_dir): |
453 | + copyfile, service_restart, git_src_dir): |
454 | class IDs(object): |
455 | pw_uid = 999 |
456 | gr_gid = 999 |
charm_lint_check #3825 openstack- dashboard- next for corey.bryant mp257192
LINT OK: passed
Build: http:// 10.245. 162.77: 8080/job/ charm_lint_ check/3825/