This commit is contained in:
2025-11-20 22:01:23 +01:00
parent ff878558f9
commit 39f8b87743
15 changed files with 692 additions and 31 deletions

View File

@@ -30,13 +30,20 @@ def create_config_cpe_lyon_batA():
R2_LYON_BAT_A_config_vrrp = render_network_config(template_name='vrrp_router.j2', data=R2_LYON_BAT_A_data)
R1_LYON_BAT_A_config_vrrp = render_network_config(template_name='vrrp_router.j2', data=R1_LYON_BAT_A_data)
R2_LYON_BAT_A_config_ospf_data = load_json_data_from_file(file_path='data/R2_CPE_LYON_BAT_A_OSPF.json')
R2_LYON_BAT_A_config_ospf = render_network_config(template_name='config_ospf.j2', data=R2_LYON_BAT_A_config_ospf_data)
R1_LYON_BAT_A_config_ospf_data = load_json_data_from_file(file_path='data/R1_CPE_LYON_BAT_A_OSPF.json')
R1_LYON_BAT_A_config_ospf = render_network_config(template_name='config_ospf.j2', data=R1_LYON_BAT_A_config_ospf_data)
return {
'esw1': ESW1_CPE_LYON_BAT_A_config,
'r1': R1_LYON_BAT_A_config,
'r2': R2_LYON_BAT_A_config,
'r1_vrrp' : R1_LYON_BAT_A_config_vrrp,
'r2_vrrp' : R2_LYON_BAT_A_config_vrrp
'r2_vrrp' : R2_LYON_BAT_A_config_vrrp,
'r1_ospf' : R1_LYON_BAT_A_config_ospf,
'r2_ospf' : R2_LYON_BAT_A_config_ospf
}
def create_config_cpe_lyon_batB():
@@ -51,12 +58,20 @@ def create_config_cpe_lyon_batB():
R2_LYON_BAT_B_config_vrrp = render_network_config(template_name='vrrp_router.j2', data=R2_LYON_BAT_B_data)
R1_LYON_BAT_B_config_vrrp = render_network_config(template_name='vrrp_router.j2', data=R1_LYON_BAT_B_data)
R2_LYON_BAT_B_config_ospf_data = load_json_data_from_file(file_path='data/R2_CPE_LYON_BAT_B_OSPF.json')
R2_LYON_BAT_B_config_ospf = render_network_config(template_name='config_ospf.j2', data=R2_LYON_BAT_B_config_ospf_data)
R1_LYON_BAT_B_config_ospf_data = load_json_data_from_file(file_path='data/R1_CPE_LYON_BAT_B_OSPF.json')
R1_LYON_BAT_B_config_ospf = render_network_config(template_name='config_ospf.j2', data=R1_LYON_BAT_B_config_ospf_data)
return {
'esw1': ESW1_CPE_LYON_BAT_B_config,
'r1': R1_LYON_BAT_B_config,
'r2': R2_LYON_BAT_B_config,
'r1_vrrp' : R1_LYON_BAT_B_config_vrrp,
'r2_vrrp' : R2_LYON_BAT_B_config_vrrp
'r2_vrrp' : R2_LYON_BAT_B_config_vrrp,
'r1_ospf' : R1_LYON_BAT_B_config_ospf,
'r2_ospf' : R2_LYON_BAT_B_config_ospf
}
if __name__ == "__main__":
@@ -72,6 +87,8 @@ if __name__ == "__main__":
save_built_config('config/ESW1_CPE_LYON_BAT_A.conf', config.get('esw1'))
save_built_config('config/R1_CPE_LYON_BAT_A_VRRP.conf', config.get('r1_vrrp'))
save_built_config('config/R2_CPE_LYON_BAT_A_VRRP.conf', config.get('r2_vrrp'))
save_built_config('config/R1_CPE_LYON_BAT_A_OSPF.conf', config.get('r1_ospf'))
save_built_config('config/R2_CPE_LYON_BAT_A_OSPF.conf', config.get('r2_ospf'))
#question 5:
config = create_config_cpe_lyon_batB()
@@ -80,4 +97,6 @@ if __name__ == "__main__":
save_built_config('config/ESW1_CPE_LYON_BAT_B.conf', config.get('esw1'))
save_built_config('config/R1_CPE_LYON_BAT_B_VRRP.conf', config.get('r1_vrrp'))
save_built_config('config/R2_CPE_LYON_BAT_B_VRRP.conf', config.get('r2_vrrp'))
save_built_config('config/R1_CPE_LYON_BAT_B_OSPF.conf', config.get('r1_ospf'))
save_built_config('config/R2_CPE_LYON_BAT_B_OSPF.conf', config.get('r2_ospf'))

View File

@@ -167,6 +167,7 @@ def question_38(nr):
resultR2 = filtreR2.run(task=netmiko_save_config)
print_result(resultR1)
print_result(resultR2)
def deploy_config_from_file(task: Task, config_file: str) -> Result:
"""Déploie la configuration depuis un fichier sur un équipement via Nornir/Netmiko."""
with open(config_file, "r") as f:
@@ -177,36 +178,52 @@ def deploy_config_from_file(task: Task, config_file: str) -> Result:
print_result(result)
return result
def deploy_vrrp(task):
vrrp_filename = task.host.name.replace("-", "_").replace("CPE", "CPE_LYON") + "_VRRP.conf"
task.run(
task=deploy_config_from_file,
config_file=f"config/{vrrp_filename}",
name=f"Déploiement VRRP {task.host.name}"
)
def deploy_ospf(task):
vrrp_filename = task.host.name.replace("-", "_").replace("CPE", "CPE_LYON") + "_OSPF.conf"
task.run(
task=deploy_config_from_file,
config_file=f"config/{vrrp_filename}",
name=f"Déploiement VRRP {task.host.name}"
)
def deploy_to_hosts(nr, host_patterns):
"""Déploie les configurations pour tous les hôtes et ajoute le fichier VRRP pour les routers."""
for pattern in host_patterns:
# Filtrer uniquement par nom pour tous
filtered_hosts = nr.filter(name=pattern)
if not filtered_hosts.inventory.hosts:
print(f"Aucun hôte correspondant à '{pattern}'")
continue
for host_name, host_obj in filtered_hosts.inventory.hosts.items():
# Nom de fichier principal
filename = host_obj.name.replace("-", "_").replace("CPE", "CPE_LYON")
# Déploiement du fichier principal
filtered_hosts.run(
# Déploiement des configs principales
def deploy_main(task):
filename = task.host.name.replace("-", "_").replace("CPE", "CPE_LYON") + ".conf"
task.run(
task=deploy_config_from_file,
config_file=f"config/{filename}.conf",
name=f"Déploiement config {host_obj.name}"
config_file=f"config/{filename}",
name=f"Déploiement config {task.host.name}"
)
# Déploiement des fichiers VRRP uniquement pour les routers
routers = nr.filter(device_type='router')
for host_name, host_obj in routers.inventory.hosts.items():
vrrp_filename = host_obj.name.replace("-", "_").replace("CPE", "CPE_LYON") + "_VRRP.conf"
routers.run(
task=deploy_config_from_file,
config_file=f"config/{vrrp_filename}",
name=f"Déploiement VRRP {host_obj.name}"
)
filtered_hosts.run(task=deploy_main)
# Déploiement VRRP uniquement pour les routers
routers = nr.filter(device_type="router")
routers.run(task=deploy_vrrp)
routers.run(task=deploy_ospf)
def question_39(nr):
host_patterns = [
'R1-CPE-BAT-A',