blob: 287b34310930260ac5f90dcf77cf804ea3a596ac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
import Bcfg2.Server.Admin
import re, os, socket
class Tidy(Bcfg2.Server.Admin.Mode):
__shorthelp__ = 'bcfg2-admin tidy [-f] [-I]'
__longhelp__ = __shorthelp__ + '\n\tClean up useless files in the repo'
def __init__(self, cfile):
Bcfg2.Server.Admin.Mode.__init__(self, cfile)
def __call__(self, args):
Bcfg2.Server.Admin.Mode.__call__(self, args)
badfiles = self.buildTidyList()
if '-f' in args or '-I' in args:
if '-I' in args:
for name in badfiles[:]:
answer = raw_input("Unlink file %s? [yN] " % name)
if answer not in ['y', 'Y']:
badfiles.remove(name)
for name in badfiles:
try:
os.unlink(name)
except IOError:
print "Failed to unlink %s" % name
else:
for name in badfiles:
print name
def buildTidyList(self):
'''Clean up unused or unusable files from the repository'''
hostmatcher = re.compile('.*\.H_(\S+)$')
to_remove = []
good = []
bad = []
# clean up unresolvable hosts in SSHbase
for name in os.listdir("%s/SSHbase" % (self.get_repo_path())):
if hostmatcher.match(name):
hostname = hostmatcher.match(name).group(1)
if hostname in good + bad:
continue
try:
socket.gethostbyname(hostname)
good.append(hostname)
except:
bad.append(hostname)
for name in os.listdir("%s/SSHbase" % (self.get_repo_path())):
if not hostmatcher.match(name):
to_remove.append("%s/SSHbase/%s" % (self.get_repo_path(), name))
else:
if hostmatcher.match(name).group(1) in bad:
to_remove.append("%s/SSHbase/%s" % (self.get_repo_path(), name))
# clean up file~
# clean up files without parsable names in Cfg
return to_remove
|