Script de migration de fichier (sed,awk....)
Résolu
Bonjour,
Pour des besoins technique je dois écrire un script qui va convertir un fichier de configuration dhcp en un fichier au format LDIF, mon script va dans un premier temps parcourir le fichier dhcp et récupérer les données ,essentiellement les adresses des sous réseaux, la plage d'adresse et les machines hote "host" (définis par un nom et une adresse MAC) de chacuns .
Je souhaiterais avoir vos avis concernant la structure de données la plus appropriée qui me permettrait de stocker ses données de façon cohérente .
fichier dhcp
subnet 1 {
address router xxx.xxx.xxx.xxx;
rang xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
rang zzz.zzz.zzz.zzz aaa.aaa.aaa.aaa
rang bbb.bbb.bbb.bbb ccc.ccc.ccc.ccc
host name1 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address xxx.xxx.xxx.xxx;
}
host name 2 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address xxx.xxx.xxx.xxx;
}
......
host name N {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address xxx.xxx.xxx.xxx;
}
}
.......
subnet N {
.
.
.
.
}
}
Comme le nombre de rang (plage d'adresse) et de Host sont variables d'un Subnet à un autre j'ai vite abandonné l'idée d'utiliser un fichier CSV (pourtant ça m'aurait faciliter la vie pour la suite...). N'hésitez pas à me faire de vos suggéstions.
Je vous remercie d'avance .
Pour des besoins technique je dois écrire un script qui va convertir un fichier de configuration dhcp en un fichier au format LDIF, mon script va dans un premier temps parcourir le fichier dhcp et récupérer les données ,essentiellement les adresses des sous réseaux, la plage d'adresse et les machines hote "host" (définis par un nom et une adresse MAC) de chacuns .
Je souhaiterais avoir vos avis concernant la structure de données la plus appropriée qui me permettrait de stocker ses données de façon cohérente .
fichier dhcp
subnet 1 {
address router xxx.xxx.xxx.xxx;
rang xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
rang zzz.zzz.zzz.zzz aaa.aaa.aaa.aaa
rang bbb.bbb.bbb.bbb ccc.ccc.ccc.ccc
host name1 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address xxx.xxx.xxx.xxx;
}
host name 2 {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address xxx.xxx.xxx.xxx;
}
......
host name N {
hardware ethernet AA:BB:CC:DD:EE:FF;
fixed-address xxx.xxx.xxx.xxx;
}
}
.......
subnet N {
.
.
.
.
}
}
Comme le nombre de rang (plage d'adresse) et de Host sont variables d'un Subnet à un autre j'ai vite abandonné l'idée d'utiliser un fichier CSV (pourtant ça m'aurait faciliter la vie pour la suite...). N'hésitez pas à me faire de vos suggéstions.
Je vous remercie d'avance .
A voir également:
- Script de migration de fichier (sed,awk....)
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
3 réponses
Vu qu'un subnet peut contenir plusieurs hostname, c'est un peu artificiel mais pourquoi pas. Car en gros tu vas avoir un truc du genre :
Du coup tu as pas mal de redondance et un tel schéma ne permet pas de stocker une information relative à un subnet (en l'occurrence rang, ...). Ou alors tu seras obligé d'avoir des lignes avec des formats différents selon que tu parles d'un subnet ou d'un hostname.
Bref c'est un peu compliqué pour être honnête.
Il faudrait comprendre un peu mieux tes besoins pour répondre correctement à cette question. Si c'est juste une migration, je doute que le format de configuration de ton serveur dhcp ait (1) changé (2) changé au point de nécessiter quelque chose de si compliqué.
Maintenant si tu tiens vraiment à faire un tel script, la bonne manière de faire serait de passer par une structure de donnée plus évoluée, par exemple un fichier ldif, json, xmlrpc, ou carrément une base de données.
Personnellement j'opterais pour un script python avec une serialisation en json (pour sauver le fichier actuel) et une déserialisation (pour déployer le nouveau fichier), éventuellement en en profitant pour adapter le format du fichier si la syntaxe a évolué. En effet le json permet de stocker un dictionnaire (et des dictionnaires imbriquées les uns dans les autres) donc c'est un format (parmi tant d'autres) qui peut coller :
https://docs.python.org/2/library/json.html
À voir ensuite dans quelle mesure le format ldif peut également faire l'affaire.
https://www.python-ldap.org/en/python-ldap-3.2.0/reference/ldif.html
Bonne chance
subnet1 host1a ...
subnet1 host1b ...
subnet1 host1c ...
subnet2 host2a ...
subnet2 host2b ...
Du coup tu as pas mal de redondance et un tel schéma ne permet pas de stocker une information relative à un subnet (en l'occurrence rang, ...). Ou alors tu seras obligé d'avoir des lignes avec des formats différents selon que tu parles d'un subnet ou d'un hostname.
Bref c'est un peu compliqué pour être honnête.
Il faudrait comprendre un peu mieux tes besoins pour répondre correctement à cette question. Si c'est juste une migration, je doute que le format de configuration de ton serveur dhcp ait (1) changé (2) changé au point de nécessiter quelque chose de si compliqué.
Maintenant si tu tiens vraiment à faire un tel script, la bonne manière de faire serait de passer par une structure de donnée plus évoluée, par exemple un fichier ldif, json, xmlrpc, ou carrément une base de données.
Personnellement j'opterais pour un script python avec une serialisation en json (pour sauver le fichier actuel) et une déserialisation (pour déployer le nouveau fichier), éventuellement en en profitant pour adapter le format du fichier si la syntaxe a évolué. En effet le json permet de stocker un dictionnaire (et des dictionnaires imbriquées les uns dans les autres) donc c'est un format (parmi tant d'autres) qui peut coller :
https://docs.python.org/2/library/json.html
À voir ensuite dans quelle mesure le format ldif peut également faire l'affaire.
https://www.python-ldap.org/en/python-ldap-3.2.0/reference/ldif.html
Bonne chance