Bonjour à tous,

Dans le cadre du boulot, j'essaye de me simplifier la vie en codant une map du reseau interne selon des données déjà collectées et présentes dans une base MySQL.
J'essaye d'utiliser python en mode Objet (il faut bien commencer un jour), mais je me retrouve bloqué par des choses que je soupçonnes être basiques mais qui me bloque complêtement.

En gros et pour faire simple, je cherche a avoir un objet Host qui va contenir une liste d'objet Interface qui vont elles même contenir chacune une liste de Gifs.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
import MySQLdb
 
class Host:
 
        def __init__(self, nom, type="", interfaces=[]):
                self.nom = nom
                self.type = type
                self.interfaces = interfaces
                self.populateInts()
 
        def populateInts(self):
                req="select nomInt, ipInt, maskInt from Interface where nomHost = '"+self.nom+"'"
                connection = MySQLdb.connect(host=servername, user=username, passwd=password, db=dbname, port=port)
                c = connection.cursor()
                intList = c.execute(req)
                intList = c.fetchall()
                ## TENTATIVE DE DEBUG ##
                print
                print self.nom
                print intList
                print
                print
                ###########################
                for int in intList:
                        self.interfaces.append(Interface(int[0], int[1], int[2], self.nom))
                c.close()
                connection.close()
 
 
class Interface:
 
        def __init__(self, nom, ip='0.0.0.0', mask='0.0.0.0', host="", gifs=[]):
                self.nom = nom
                self.ip = ip
                self.mask = mask
                self.host = host
                self.gifs = gifs
                self.populateGifs()
 
        def populateGifs(self):
                req="select nomGif, hostSrcIp, ipSrc, hostDest, hostDestIp, ipDest, etatGif, costGif, maskGif from Gif where nomInt = '"+self.nom+"' and nomHost = '"+self.host+"'"
                connection = MySQLdb.connect(host=servername, user=username, passwd=password, db=dbname, port=port)
                c = connection.cursor()
                gifList = c.execute(req)
                gifList = c.fetchall()
                for gif in gifList:
                        self.gifs.append(Gif(gif[0], gif[1], gif[2], gif[3], gif[4], gif[5], gif[6], gif[7], gif[8], self.host, self.nom))
                c.close()
                connection.close()
 
 
class Gif:
 
        def __init__(self, nom, hostSrcIp='0.0.0.0', ipSrc='0.0.0.0', hostDest="", hostDestIp='0.0.0.0', ipDest='0.0.0.0', etat='', cost='', mask='', host="", int=""):
                self.nom = nom
                self.hostSrcIp = hostSrcIp
                self.ipSrc = ipSrc
                self.hostDest = hostDest
                self.hostDestIp = hostDestIp
                self.ipDest = ipDest
                self.etat = etat
                self.cost = cost
                self.mask = mask
                self.host = host
                self.int = int
 
h = Host('router1')
h2 = Host('router2')
 
## TENTATIVE DE DEBUG ##
print h.nom
print len(h.interfaces)
for i in h.interfaces:
        print "\t"+i.nom+" => "+str(len(i.gifs))
print h2.nom
print len(h2.interfaces)
for i in h2.interfaces:
        print "\t"+i.nom+" => "+str(len(i.gifs))
##########################
Cela me donne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
 
## ici ce sont les resultats printés dans la methode populateInts, on y voit des interfaces bien differentes :
router1
(('lo0', 'XX.XX.XX.XX', ''), ('enc0', '', ''), ('pflog0', '', ''), ('fxp1', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp0', 'XX.XX.XX.XX', '0xffffff00'), ('fxp3', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp4', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp2', 'XX.XX.XX.XX', '0xfffffff8'), ('fxp5', 'XX.XX.XX.XX', '0xffffff00'), ('pfsync0', '', ''))
 
gwbld3
(('lo0', '127.0.0.1', ''), ('enc0', '', ''), ('pflog0', '', ''), ('fxp1', '', ''), ('fxp3', '', ''), ('fxp0', 'XX.XX.XX.XX', '0xffffff00'), ('fxp2', 'XXX.XXX.XXX.XXX', '0xfffffff8'), ('fxp5', '', ''), ('fxp4', '', ''), ('pfsync0', '', ''))
 
## ici ce qui est printé en fin de programme, on dirait que la liste self.interfaces est commune à mes deux instances :
 
gwbld2
20
        lo0 => 35
        enc0 => 35
        pflog0 => 35
        fxp1 => 35
        fxp0 => 35
        fxp3 => 35
        fxp4 => 35
        fxp2 => 35
        fxp5 => 35
        pfsync0 => 35
        lo0 => 35
        enc0 => 35
        pflog0 => 35
        fxp1 => 35
        fxp3 => 35
        fxp0 => 35
        fxp2 => 35
        fxp5 => 35
        fxp4 => 35
        pfsync0 => 35
gwbld3
20
        lo0 => 35
        enc0 => 35
        pflog0 => 35
        fxp1 => 35
        fxp0 => 35
        fxp3 => 35
        fxp4 => 35
        fxp2 => 35
        fxp5 => 35
        pfsync0 => 35
        lo0 => 35
        enc0 => 35
        pflog0 => 35
        fxp1 => 35
        fxp3 => 35
        fxp0 => 35
        fxp2 => 35
        fxp5 => 35
        fxp4 => 35
        pfsync0 => 35

On dirait que ma liste d'interfaces est commune aux 2 Host.
Et que la liste de gifs est commune à tous les objets Interface.

Quelqu'un saurait-il me dire si mon raisonnement est bon, et du coup ce qui ne va pas dans ma façon de faire.
Car les attributs de type string sont uniques à chaque instance mais par contre mes listes ne le sont pas, Pourquoi donc ?


Merci à toi, qui à pris le temps de lire et peu-être même le temps de répondre