Merge lp:~gnuoy/charms/precise/ceph/add-preinstall-hook into lp:~charmers/charms/precise/ceph/trunk

Proposed by Liam Young
Status: Merged
Merged at revision: 66
Proposed branch: lp:~gnuoy/charms/precise/ceph/add-preinstall-hook
Merge into: lp:~charmers/charms/precise/ceph/trunk
Diff against target: 90 lines (+54/-0)
4 files modified
charm-helpers-sync.yaml (+1/-0)
hooks/charmhelpers/payload/__init__.py (+1/-0)
hooks/charmhelpers/payload/execd.py (+50/-0)
hooks/hooks.py (+2/-0)
To merge this branch: bzr merge lp:~gnuoy/charms/precise/ceph/add-preinstall-hook
Reviewer Review Type Date Requested Status
Marco Ceppi (community) Approve
Review via email: mp+194897@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Marco Ceppi (marcoceppi) wrote :

LGTM, Thanks for the improvements! +!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'charm-helpers-sync.yaml'
2--- charm-helpers-sync.yaml 2013-07-03 20:51:57 +0000
3+++ charm-helpers-sync.yaml 2013-11-12 16:48:22 +0000
4@@ -5,3 +5,4 @@
5 - fetch
6 - contrib.storage.linux:
7 - utils
8+ - payload.execd
9
10=== added directory 'hooks/charmhelpers/payload'
11=== added file 'hooks/charmhelpers/payload/__init__.py'
12--- hooks/charmhelpers/payload/__init__.py 1970-01-01 00:00:00 +0000
13+++ hooks/charmhelpers/payload/__init__.py 2013-11-12 16:48:22 +0000
14@@ -0,0 +1,1 @@
15+"Tools for working with files injected into a charm just before deployment."
16
17=== added file 'hooks/charmhelpers/payload/execd.py'
18--- hooks/charmhelpers/payload/execd.py 1970-01-01 00:00:00 +0000
19+++ hooks/charmhelpers/payload/execd.py 2013-11-12 16:48:22 +0000
20@@ -0,0 +1,50 @@
21+#!/usr/bin/env python
22+
23+import os
24+import sys
25+import subprocess
26+from charmhelpers.core import hookenv
27+
28+
29+def default_execd_dir():
30+ return os.path.join(os.environ['CHARM_DIR'], 'exec.d')
31+
32+
33+def execd_module_paths(execd_dir=None):
34+ """Generate a list of full paths to modules within execd_dir."""
35+ if not execd_dir:
36+ execd_dir = default_execd_dir()
37+
38+ if not os.path.exists(execd_dir):
39+ return
40+
41+ for subpath in os.listdir(execd_dir):
42+ module = os.path.join(execd_dir, subpath)
43+ if os.path.isdir(module):
44+ yield module
45+
46+
47+def execd_submodule_paths(command, execd_dir=None):
48+ """Generate a list of full paths to the specified command within exec_dir.
49+ """
50+ for module_path in execd_module_paths(execd_dir):
51+ path = os.path.join(module_path, command)
52+ if os.access(path, os.X_OK) and os.path.isfile(path):
53+ yield path
54+
55+
56+def execd_run(command, execd_dir=None, die_on_error=False, stderr=None):
57+ """Run command for each module within execd_dir which defines it."""
58+ for submodule_path in execd_submodule_paths(command, execd_dir):
59+ try:
60+ subprocess.check_call(submodule_path, shell=True, stderr=stderr)
61+ except subprocess.CalledProcessError as e:
62+ hookenv.log("Error ({}) running {}. Output: {}".format(
63+ e.returncode, e.cmd, e.output))
64+ if die_on_error:
65+ sys.exit(e.returncode)
66+
67+
68+def execd_preinstall(execd_dir=None):
69+ """Run charm-pre-install for each module within execd_dir."""
70+ execd_run('charm-pre-install', execd_dir=execd_dir)
71
72=== modified file 'hooks/hooks.py'
73--- hooks/hooks.py 2013-09-23 10:13:17 +0000
74+++ hooks/hooks.py 2013-11-12 16:48:22 +0000
75@@ -32,6 +32,7 @@
76 umount
77 )
78 from charmhelpers.fetch import add_source
79+from charmhelpers.payload.execd import execd_preinstall
80
81 from utils import (
82 render_template,
83@@ -51,6 +52,7 @@
84 @hooks.hook('install')
85 def install():
86 log('Begin install hook.')
87+ execd_preinstall()
88 add_source(config('source'), config('key'))
89 apt_update(fatal=True)
90 apt_install(packages=ceph.PACKAGES, fatal=True)

Subscribers

People subscribed via source and target branches

to all changes: