Merge lp:~niedbalski/charms/precise/swift-storage/add-fstab-persist into lp:~openstack-charmers-archive/charms/precise/swift-storage/trunk

Proposed by Jorge Niedbalski
Status: Superseded
Proposed branch: lp:~niedbalski/charms/precise/swift-storage/add-fstab-persist
Merge into: lp:~openstack-charmers-archive/charms/precise/swift-storage/trunk
Diff against target: 179 lines (+117/-7)
3 files modified
hooks/charmhelpers/core/fstab.py (+95/-0)
hooks/charmhelpers/core/host.py (+20/-6)
hooks/swift_storage_utils.py (+2/-1)
To merge this branch: bzr merge lp:~niedbalski/charms/precise/swift-storage/add-fstab-persist
Reviewer Review Type Date Requested Status
OpenStack Charmers Pending
Review via email: mp+220841@code.launchpad.net

This proposal has been superseded by a proposal from 2014-06-02.

Description of the change

- Updated charm-helpers with fstab persist support
- Modified mount command for specify "xfs" filesystem type

To post a comment you must log in.
29. By Jorge Niedbalski

Removed usufed fstab_add

30. By Jorge Niedbalski

Re-imported from ~charm-helpers, added support for UUID,LABEL entries

31. By Jorge Niedbalski

Re-imported charm-helpers from latest merged version

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'hooks/charmhelpers/core/fstab.py'
2--- hooks/charmhelpers/core/fstab.py 1970-01-01 00:00:00 +0000
3+++ hooks/charmhelpers/core/fstab.py 2014-05-23 18:35:33 +0000
4@@ -0,0 +1,95 @@
5+#!/usr/bin/env python
6+# -*- coding: utf-8 -*-
7+
8+__author__ = 'Jorge Niedbalski R. <jorge.niedbalski@canonical.com>'
9+
10+import os
11+
12+
13+class Fstab(file):
14+ """This class extends file in order to implement a file reader/writer
15+ for file `/etc/fstab`
16+ """
17+
18+ class Entry(object):
19+ """Entry class represents a non-comment line on the `/etc/fstab` file
20+ """
21+ def __init__(self, device, mountpoint, filesystem,
22+ options, d=0, p=0):
23+ self.device = device
24+ self.mountpoint = mountpoint
25+ self.filesystem = filesystem
26+
27+ if not options:
28+ options = "defaults"
29+
30+ self.options = options
31+ self.d = d
32+ self.p = p
33+
34+ def __str__(self):
35+ return "{} {} {} {} {} {}".format(self.device,
36+ self.mountpoint,
37+ self.filesystem,
38+ self.options,
39+ self.d,
40+ self.p)
41+
42+ DEFAULT_PATH = os.path.join(os.path.sep, 'etc', 'fstab')
43+
44+ def __init__(self, path=None):
45+ if path:
46+ self._path = path
47+ else:
48+ self._path = self.DEFAULT_PATH
49+ file.__init__(self, self._path, 'r+')
50+
51+ @property
52+ def entries(self):
53+ self.seek(0)
54+ for line in self.readlines():
55+ if not line.startswith("#"):
56+ try:
57+ (dev, mp, fs, options, d, p) = line.strip("\n").split(" ")
58+ yield Fstab.Entry(dev, mp, fs, options, d=d, p=p)
59+ except ValueError:
60+ pass
61+
62+ def get_entry_by_attr(self, attr, value):
63+ for entry in self.entries:
64+ e_attr = getattr(entry, attr)
65+ if e_attr == value:
66+ return entry
67+ return None
68+
69+ def add_entry(self, entry):
70+ if self.get_entry_by_attr('device', entry.device):
71+ return False
72+
73+ self.write(str(entry) + '\n')
74+ return entry
75+
76+ def remove_entry(self, entry):
77+ self.seek(0)
78+ lines = self.readlines()
79+ for index, line in enumerate(lines):
80+ if line == str(entry) + '\n':
81+ lines.remove(line)
82+
83+ self.seek(0)
84+ self.write(''.join(lines))
85+ self.truncate()
86+ return True
87+
88+ @classmethod
89+ def remove_by_mountpoint(cls, mountpoint):
90+ fstab = cls()
91+ entry = fstab.get_entry_by_attr('mountpoint', mountpoint)
92+ if entry:
93+ return fstab.remove_entry(entry)
94+ return False
95+
96+ @classmethod
97+ def add(cls, device, mountpoint, filesystem, options=None):
98+ return cls().add_entry(Fstab.Entry(device, mountpoint, filesystem,
99+ options=options))
100
101=== modified file 'hooks/charmhelpers/core/host.py'
102--- hooks/charmhelpers/core/host.py 2014-05-19 11:41:35 +0000
103+++ hooks/charmhelpers/core/host.py 2014-05-23 18:35:33 +0000
104@@ -17,6 +17,7 @@
105 from collections import OrderedDict
106
107 from hookenv import log
108+from fstab import Fstab
109
110
111 def service_start(service_name):
112@@ -35,7 +36,8 @@
113
114
115 def service_reload(service_name, restart_on_failure=False):
116- """Reload a system service, optionally falling back to restart if reload fails"""
117+ """Reload a system service, optionally falling back to restart if
118+ reload fails"""
119 service_result = service('reload', service_name)
120 if not service_result and restart_on_failure:
121 service_result = service('restart', service_name)
122@@ -144,7 +146,19 @@
123 target.write(content)
124
125
126-def mount(device, mountpoint, options=None, persist=False):
127+def fstab_remove(mp):
128+ """Remove the given mountpoint entry from /etc/fstab
129+ """
130+ return Fstab.remove_by_mountpoint(mp)
131+
132+
133+def fstab_add(dev, mp, fs, options=None):
134+ """Adds the given device entry to the /etc/fstab file
135+ """
136+ return Fstab.add(dev, mp, fs, options=options)
137+
138+
139+def mount(device, mountpoint, options=None, persist=False, filesystem="ext3"):
140 """Mount a filesystem at a particular mountpoint"""
141 cmd_args = ['mount']
142 if options is not None:
143@@ -155,9 +169,9 @@
144 except subprocess.CalledProcessError, e:
145 log('Error mounting {} at {}\n{}'.format(device, mountpoint, e.output))
146 return False
147+
148 if persist:
149- # TODO: update fstab
150- pass
151+ return fstab_add(device, mountpoint, filesystem, options=options)
152 return True
153
154
155@@ -169,9 +183,9 @@
156 except subprocess.CalledProcessError, e:
157 log('Error unmounting {}\n{}'.format(mountpoint, e.output))
158 return False
159+
160 if persist:
161- # TODO: update fstab
162- pass
163+ return fstab_remove(mountpoint)
164 return True
165
166
167
168=== modified file 'hooks/swift_storage_utils.py'
169--- hooks/swift_storage_utils.py 2014-04-07 14:50:34 +0000
170+++ hooks/swift_storage_utils.py 2014-05-23 18:35:33 +0000
171@@ -181,7 +181,8 @@
172 _dev = os.path.basename(dev)
173 _mp = os.path.join('/srv', 'node', _dev)
174 mkdir(_mp, owner='swift', group='swift')
175- mount(dev, '/srv/node/%s' % _dev, persist=True)
176+ mount(dev, '/srv/node/%s' % _dev, persist=True,
177+ filesystem="xfs")
178 check_call(['chown', '-R', 'swift:swift', '/srv/node/'])
179 check_call(['chmod', '-R', '0750', '/srv/node/'])
180

Subscribers

People subscribed via source and target branches