Merge lp:~moon127/charms/trusty/percona-cluster/add-execd-support into lp:~openstack-charmers-archive/charms/trusty/percona-cluster/trunk

Proposed by Gareth Woolridge
Status: Merged
Merged at revision: 31
Proposed branch: lp:~moon127/charms/trusty/percona-cluster/add-execd-support
Merge into: lp:~openstack-charmers-archive/charms/trusty/percona-cluster/trunk
Diff against target: 89 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/percona_hooks.py (+2/-0)
To merge this branch: bzr merge lp:~moon127/charms/trusty/percona-cluster/add-execd-support
Reviewer Review Type Date Requested Status
OpenStack Charmers Pending
Review via email: mp+224079@code.launchpad.net

Description of the change

Add exec.d preinstall support for use with basenode.

To post a comment you must log in.

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 2014-03-07 11:04:44 +0000
3+++ charm-helpers-sync.yaml 2014-06-23 09:09:09 +0000
4@@ -5,3 +5,4 @@
5 - fetch
6 - contrib.hahelpers.cluster
7 - contrib.peerstorage
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 2014-06-23 09:09:09 +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 2014-06-23 09:09:09 +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/percona_hooks.py'
73--- hooks/percona_hooks.py 2014-04-11 16:16:35 +0000
74+++ hooks/percona_hooks.py 2014-06-23 09:09:09 +0000
75@@ -53,12 +53,14 @@
76 is_leader
77 )
78 from mysql import configure_db
79+from charmhelpers.payload.execd import execd_preinstall
80
81 hooks = Hooks()
82
83
84 @hooks.hook('install')
85 def install():
86+ execd_preinstall()
87 if config('source') is None and \
88 lsb_release()['DISTRIB_CODENAME'] < 'trusty':
89 setup_percona_repo()

Subscribers

People subscribed via source and target branches

to status/vote changes: