Skip to content

Commit

Permalink
making conf parse robust against missing sections, monitors see /0 ::…
Browse files Browse the repository at this point in the history
…/0 if autoconf
  • Loading branch information
vkotronis committed Oct 22, 2019
1 parent 7c57557 commit ca2e592
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 5 deletions.
16 changes: 13 additions & 3 deletions backend/core/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,8 @@ def translate_learn_rule_dicts_to_yaml_conf(
created_prefix_anchors = set()
for prefix in rule_prefix:
prefix_anchor = rule_prefix[prefix]
if "prefixes" not in yaml_conf:
yaml_conf["prefixes"] = ruamel.yaml.comments.CommentedMap()
if prefix_anchor not in yaml_conf["prefixes"]:
yaml_conf["prefixes"][
prefix_anchor
Expand All @@ -468,6 +470,8 @@ def translate_learn_rule_dicts_to_yaml_conf(
created_asn_anchors = set()
for asn in sorted(rule_asns):
asn_anchor = rule_asns[asn]
if "asns" not in yaml_conf:
yaml_conf["asns"] = ruamel.yaml.comments.CommentedMap()
if asn_anchor not in yaml_conf["asns"]:
yaml_conf["asns"][
asn_anchor
Expand Down Expand Up @@ -512,6 +516,8 @@ def translate_learn_rule_dicts_to_yaml_conf(

# check existence of rule (by checking the affected prefixes, origin_asns, and neighbors)
existing_rule_found = False
if "rules" not in yaml_conf:
yaml_conf["rules"] = ruamel.yaml.comments.CommentedSeq()
for existing_rule in yaml_conf["rules"]:
existing_rule_prefixes = set()
for existing_prefix_seq in existing_rule["prefixes"]:
Expand Down Expand Up @@ -1049,12 +1055,16 @@ def check(self, data: Text) -> Dict:
if section not in self.sections:
raise ArtemisError("invalid-section", section)

data["prefixes"] = {k: flatten(v) for k, v in data["prefixes"].items()}
data["prefixes"] = {
k: flatten(v) for k, v in data.get("prefixes", {}).items()
}
data["asns"] = {k: flatten(v) for k, v in data.get("asns", {}).items()}
data["monitors"] = data.get("monitors", {})
data["rules"] = data.get("rules", [])

Configuration.Worker.__check_prefixes(data["prefixes"])
self.__check_rules(data.get("rules", []))
self.__check_monitors(data.get("monitors", {}))
self.__check_rules(data["rules"])
self.__check_monitors(data["monitors"])
Configuration.Worker.__check_asns(data["asns"])

return data
Expand Down
4 changes: 2 additions & 2 deletions frontend/webapp/core/fetch_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ def get_prefixes_list(self):
return []

prefixes_list = []
for rule in self.config_yaml["rules"]:
for rule in self.config_yaml.get("rules", []):
rule["prefixes"] = flatten(rule["prefixes"])
for prefix in rule["prefixes"]:
if prefix not in prefixes_list:
prefixes_list.append(prefix)
return prefixes_list

def get_rules_list(self):
return self.config_yaml["rules"]
return self.config_yaml.get("rules", [])

def get_raw_response(self):
return self.raw_json
Expand Down
4 changes: 4 additions & 0 deletions monitor/core/taps/bgpstreamhist.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ def parse_bgpstreamhist_csvs(prefixes_file=None, input_dir=None, autoconf=False)

prefixes = load_json(prefixes_file)
assert prefixes is not None
# add /0 if autoconf
if autoconf:
prefixes.append("0.0.0.0/0")
prefixes.append("::/0")

with Connection(RABBITMQ_URI) as connection:
update_exchange = Exchange(
Expand Down
4 changes: 4 additions & 0 deletions monitor/core/taps/exabgp_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ def start(self):
self.update_exchange.declare()
self.autoconf_exchange.declare()
validator = mformat_validator()
# add /0 if autoconf
if self.autoconf:
self.prefixes.append("0.0.0.0/0")
self.prefixes.append("::/0")

try:
self.sio = SocketIO("http://" + self.host, namespace=BaseNamespace)
Expand Down

0 comments on commit ca2e592

Please sign in to comment.