Coverage for lib/lib_charm_etckeeper.py : 93%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""The EtcKeeper helper module."""
2from charmhelpers.core import hookenv, unitdata, host, templating
3from charms.reactive.helpers import any_file_changed
4from subprocess import check_call
7class EtcKeeper:
8 """The EtcKeeper helper class."""
10 config_file = "/etc/etckeeper/etckeeper.conf"
12 def __init__(self):
13 """Instantiate class variables."""
14 self.charm_config = hookenv.config()
15 self.kv = unitdata.kv()
17 def run_etckeeper(self, args):
18 """Run etckeeper with the provided arguments."""
19 if len(args) > 0:
20 cmd = [
21 "etckeeper"
22 ]
23 cmd.extend(args)
24 return check_call(cmd)
25 return False
27 def render_config(self):
28 """Render configuration file."""
29 hookenv.log(
30 "Rendering etckeeper configuration to {}".format(self.config_file),
31 hookenv.DEBUG,
32 )
33 templating.render(
34 "etckeeper.conf.j2",
35 self.config_file,
36 {
37 "etckeeper_remote": self.charm_config.get("vcs-remote"),
38 "etckeeper_vcs": self.charm_config.get("vcs")
39 },
40 )
41 if any_file_changed([self.config_file]):
42 self.init_repo()
43 return True
44 return False
46 def init_repo(self):
47 """Initialise the etckeeper repository."""
48 if self.run_etckeeper(["init"]):
49 self.kv.set("etckeeper_init", True)
50 else:
51 return False
53 def bootstrap_etc(self):
54 """Set up repo and update KV with status."""
55 if self.kv.get("etckeeper_init"):
56 hookenv.log("Skipping etckeeper init on already-initialised repo.", hookenv.DEBUG)
57 return True
58 if self.init_repo():
59 return True
60 return False
62 def enable_timer(self):
63 """Enable daily timer for etckeeper."""
64 host.service("enable", "etckeeper.timer")
66 def disable_timer(self):
67 """Disable daily timer for etckeeper."""
68 host.service("disable", "etckeeper.timer")
70 def configure(self):
71 """Configure etckeeper."""
72 self.render_config()
73 self.bootstrap_etc()
74 if self.charm_config.get('daily'):
75 self.enable_timer()
76 else:
77 self.disable_timer()
78 hookenv.status_set('active', 'etckeeper installed and configured')
80 def commit(self):
81 """Commit changes and push to a remote."""
82 self.run_etckeeper(["commit", "Charm initiated commit"])
83 return True