# -*- mode: python; coding: utf-8 -*- # # Recuperation des addresses ip des serveurs # Parfois, on prend un gaierror parce que hostname ne retourne rien, je sais # pas d'où ça vient, mais c'est caca. import socket def pubipof(hostname): try: return socket.gethostbyname(hostname + ".crans.org") except: # Peut-être un serveur de la ferme ? return socket.gethostbyname(hostname + ".ferme.crans.org") def admipof(hostname): return socket.gethostbyname(hostname + ".adm.crans.org") def wifiipof(hostname): return socket.gethostbyname(hostname + ".wifi.crans.org") def pubip(): return pubipof(hostname) def admip(): return admipof(hostname) def wifiip(): return wifiipof(hostname) def ips_of_metadata(clients, vlan='adm'): """Renvoie la liste des IPs des machines de la liste ``clients`` #TODO: sur le vlan ``vlan`` sur le vlan adm Renvoie les Ipv4 et Ipv6. ``clients`` est une liste de ClientMetadata, qui peut être obtenue via metadata.query.by_groups (ou similaire) """ out = [] for client in clients: host = client.hostname for res in socket.getaddrinfo(host, None, socket.AF_UNSPEC, socket.SOCK_STREAM): # if res[0] == socket.AF_INET6: # suffix = '/128' # else: # suffix = '/32' out.append(res[4][0]) return out ip_vlan = { 'sable' : { 'vlan-radin' : '10.42.0.1', 'vlan-accueil' : '10.51.0.1', 'vlan-ens' : '10.2.9.2', 'vlan-isolement':'10.52.0.1' }, 'dhcp' : { 'vlan-radin' : '10.42.0.34', 'vlan-accueil' : '10.51.0.34', 'vlan-ens' : '10.2.9.34', 'vlan-isolement':'10.52.0.34' }, 'nat64' : { 'vlan-radin' : '10.42.0.164', }, 'isc' : { 'vlan-radin' : '10.42.0.160', 'vlan-accueil' : '10.51.0.160', 'vlan-ens' : '10.2.9.160', 'vlan-isolement':'10.52.0.160' }, 'routeur' : { 'vlan-accueil' : '10.51.0.10', 'vlan-ens' : '10.2.9.10', 'vlan-isolement':'10.52.0.10' }, 'titanic' : {'vlan-ens' : '10.2.9.1' }, 'komaz' : {'vlan-ens' : '10.2.9.4' }, } def radinip(): if has("vlan-radin"): return ip_vlan[hostname]["vlan-radin"] else: raise NotImplementedError, "Ce serveur n'a rien a faire sur le VLAN radin" def accueilip(): if has("vlan-accueil"): return ip_vlan[hostname]["vlan-accueil"] else: raise NotImplementedError, "Ce serveur n'a rien a faire sur le VLAN d'accueil" def appt_ens_ip(): if has("vlan-ens"): return ip_vlan[hostname]["vlan-ens"] else: raise NotImplementedError, "Ce serveur n'a rien a faire sur le VLAN des appartements de l'ENS" def isolementip(): if has("vlan-isolement"): return ip_vlan[hostname]["vlan-isolement"] else: raise NotImplementedError, "Ce serveur n'a rien a faire sur le VLAN isolement"