82 lines
1.8 KiB
Python
82 lines
1.8 KiB
Python
from check_correct import check_correct
|
|
from parse import parse_csv_to_structure
|
|
import sys
|
|
from structures import Host, Wire, Interface
|
|
import yaml
|
|
|
|
|
|
"""
|
|
meta:
|
|
id: "lab-02-basic-utils"
|
|
name: "Basic Network Utilities & Traffic Monitoring"
|
|
description: "Two hosts connected directly to each other."
|
|
|
|
links:
|
|
- endpoints: ["PC1", "PC2"]
|
|
|
|
nodes:
|
|
- name: PC1
|
|
role: host
|
|
interfaces:
|
|
- ip: "10.0.12.1/24"
|
|
|
|
- name: PC2
|
|
role: host
|
|
interfaces:
|
|
- ip: "10.0.12.2/24"
|
|
"""
|
|
|
|
|
|
def make_res(data, name):
|
|
res = {
|
|
"meta": {
|
|
"id": name,
|
|
"name": name,
|
|
},
|
|
"links": [],
|
|
"nodes": [],
|
|
}
|
|
|
|
host_int = {}
|
|
|
|
for key, value in data.items():
|
|
if value.get("type") == "host":
|
|
value["name"] = key
|
|
host = Host(value)
|
|
node_entry = {
|
|
"name": host.name,
|
|
"role": "host",
|
|
"interfaces": [
|
|
{"ip": Interface(data[iface]).ip_address}
|
|
for iface in host.interfaces
|
|
],
|
|
}
|
|
res["nodes"].append(node_entry)
|
|
|
|
host_int[host.interfaces[0]] = host.name
|
|
|
|
for key, value in data.items():
|
|
if value.get("type") == "wire":
|
|
wire = Wire(value)
|
|
link_entry = {
|
|
"endpoints": [
|
|
host_int[wire.endpoints[0]],
|
|
host_int[wire.endpoints[1]],
|
|
]
|
|
}
|
|
res["links"].append(link_entry)
|
|
|
|
return res
|
|
|
|
|
|
if __name__ == "__main__":
|
|
data = parse_csv_to_structure(sys.argv[1])
|
|
print(data)
|
|
if check_correct(data):
|
|
print("Data is correct.")
|
|
res = make_res(data, sys.argv[1])
|
|
print(res)
|
|
|
|
with open("output.yaml", "w") as f:
|
|
yaml.dump(res, f)
|