Pièce jointe « makeit.py »
Téléchargement 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 import os, sys, csv, getopt
5
6
7 def listmodule(path):
8 liste = [os.path.splitext(os.path.basename(fle))[0]
9 for fle in os.listdir(path)]
10 set = {}
11 map(set.__setitem__, liste, [])
12 return set.keys()
13
14 def importing(modulename):
15 return __import__(modulename)
16
17 """
18 def read (filename):
19
20 Détermine le type de fichier de données et active la fonction
21 de lecture correspondante.
22
23 ext = os.path.splitext(filename)[1]
24 read_func = getattr(__NAME__, "read_%s"% ext, read_csv)
25 read_func(filename)
26 """
27
28 def read_csv(csvfile):
29 """
30 Cette fonction parse le fichier de données au format csv
31 et retourne le searchList à partir de ces données.
32 La première ligne de données contient les champs de colonne.
33 """
34 infile = csv.reader(open(csvfile,"rb"))
35 headers = []
36 isFirstLine = True
37 searchList = []
38 for row in infile:
39 entry = {}
40 if isFirstLine :
41 isFirstLine = False
42 headers = row
43 continue
44 else:
45 for item in headers:
46 entry[item] = row[headers.index(item)]
47 searchList.append(entry)
48 return searchList
49
50 """
51 Produit les fichiers de configuration de Nagios:
52 - basedir = contient un sous répertoire pour les templates compilés et
53 un sous répertoire pour les fichiers de config générés
54 - tempdir = répertoire contenant les templates générés par cheetah
55 - confdir = répertoire dans lequel sont déposés les fichiers de conf de
56 nagios générés par ce script
57 - datadir = répertoire dans lequel sont déposés les fichiers de données
58
59 Si basedir est spécifié seul: tempdir = basedir/templates,
60 confdir = basedir/conf et datadir = basedir/data
61 Si basedir est spécifié avec l'un des trois autres paramètres, alors la
62 valeur du paramètre spécifié est prioritaire:
63 basedir = /root, tempdir = /root/cheetah, alors
64 confdir = /root/conf, tempdir = /root/cheetah et
65 datadir = /root/data
66 Si basedir n'est pas spécifié, alors, ce sera par défaut /etc/nagios3
67 """
68 def process(basedir='/etc/nagios3', tempdir='/etc/nagios3/templates',
69 confdir='/etc/nagios3/conf.d', datadir='/etc/nagios3/data'):
70 for modulename in listmodule(tempdir):
71 if tempdir not in sys.path:
72 sys.path.append(tempdir)
73 module = importing(modulename)
74 searchlist = read_csv(os.path.join(datadir, modulename+ ".csv"))
75 outfile = open(os.path.join(confdir, modulename+ ".cfg"), "w")
76 for dic in searchlist:
77 liste = []
78 liste.append(dic)
79 serv = getattr(module, modulename)(searchList=liste)
80 outfile.write(serv.respond())
81 outfile.write("\n")
82 outfile.close()
83
84 def usage():
85 pass
86
87 def main(argv):
88 basedir = '/etc/nagios3'
89 tempdir = ''
90 confdir = ''
91 datadir = ''
92
93 try:
94 opts, args = getopt.getopt(argv, "b:c:t:d:",
95 ["basedir=", "confdir=", "tempdir=", "datadir="])
96 for key in args:
97 if args.index(key) % 2 == 0: continue
98 if key == '--basedir':
99 basedir = args[args.index(key)+1]
100 else:
101 if key == '--tempdir': tempdir = args[args.index(key)+1]
102 else:
103 if key == '--confdir':
104 confdir= args[args.index(key)+1]
105 else: datadir == args[args.index(key)+1]
106 if len(tempdir) == 0: tempdir = basedir+'/templates'
107 if len(confdir) == 0: confdir = basedir+'/conf.d'
108 if len(datadir) == 0: datadir = basedir+'/data'
109 process(basedir, tempdir, confdir, datadir)
110 except getopt.GetoptError:
111 usage()
112 sys.exit(1)
113
114 main(sys.argv)
Fichiers joints
Pour vous référer aux pièces jointes d'une page, utilisez attachment:filename, comme indiqué ci-dessous dans la liste de fichiers. N'utilisez pas l'URL du lien [get], car elle peut changer et donc être facilement cassée.Vous n'êtes pas autorisé à joindre un fichier à cette page.