def _check_config_files(directory): """Verify config files exist and are readable. Arguments: directory {Path} -- Config directory Path object Raises: ConfigMissing: Raised if a required config file does not pass checks. Returns: {tuple} -- main config, devices config, commands config """ files = () for file in CONFIG_FILES: file_name, required = file file_path = directory / file_name checked = check_path(file_path) if checked is None and required: raise ConfigMissing(missing_item=str(file_path)) if checked is None and not required: log.warning( "'{f}' was not found, but is not required to run hyperglass. " + "Defaults will be used.", f=str(file_path), ) files += (file_path, ) return files
def set_dynamic(cls, values: Dict) -> Dict: """Set dynamic attributes before VRF initialization.""" if values["name"] == "default": log.warning( """You have set the VRF name to 'default'. This is no longer the way to designate a VRF as the default (or global routing table) VRF. Instead, add 'default: true' to the VRF definition. """) if values.get("default", False) is True: protocol4 = "ipv4_default" protocol6 = "ipv6_default" else: protocol4 = "ipv4_vpn" protocol6 = "ipv6_vpn" if values.get("ipv4") is not None: values["ipv4"].protocol = protocol4 values["ipv4"].version = 4 if values.get("ipv6") is not None: values["ipv6"].protocol = protocol6 values["ipv6"].version = 6 if values.get("default", False) and values.get("display_name") is None: values["display_name"] = "Global" return values
def validate_ssl(cls, value, values): """Set default cert file location if undefined. Arguments: value {object} -- SSL object values {dict} -- Other already-valiated fields Returns: {object} -- SSL configuration """ if value is not None: if value.enable and value.cert is None: app_path = Path(os.environ["hyperglass_directory"]) cert_file = app_path / "certs" / f'{values["name"]}.pem' if not cert_file.exists(): log.warning("No certificate found for device {d}", d=values["name"]) cert_file.touch() value.cert = cert_file return value
def _check_config_files(directory: Path): """Verify config files exist and are readable.""" files = () for file in CONFIG_FILES: file_name, required = file file_path = directory / file_name checked = check_path(file_path) if checked is None and required: raise ConfigMissing(missing_item=str(file_path)) if checked is None and not required: log.warning( "'{f}' was not found, but is not required to run hyperglass. " + "Defaults will be used.", f=str(file_path), ) files += (file_path, ) return files
def find_device_id(values: Dict) -> Tuple[str, Dict]: """Generate device id & handle legacy display_name field.""" def generate_id(name: str) -> str: scrubbed = re.sub(r"[^A-Za-z0-9\_\-\s]", "", name) return "_".join(scrubbed.split()).lower() name = values.pop("name", None) if name is None: raise ValueError("name is required.") legacy_display_name = values.pop("display_name", None) if legacy_display_name is not None: log.warning( "The 'display_name' field is deprecated. Use the 'name' field instead." ) device_id = generate_id(legacy_display_name) display_name = legacy_display_name else: device_id = generate_id(name) display_name = name return device_id, {"name": display_name, "display_name": None, **values}
"host": str(params.listen_address), "port": params.listen_port, "debug": params.debug, "workers": cpu_count(2), } DOCS_PARAMS = {} if params.docs.enable: DOCS_PARAMS.update({"openapi_url": params.docs.openapi_uri}) if params.docs.mode == "redoc": DOCS_PARAMS.update({"docs_url": None, "redoc_url": params.docs.uri}) elif params.docs.mode == "swagger": DOCS_PARAMS.update({"docs_url": params.docs.uri, "redoc_url": None}) for directory in (UI_DIR, IMAGES_DIR): if not directory.exists(): log.warning("Directory '{d}' does not exist, creating...", d=str(directory)) directory.mkdir() # Main App Definition app = FastAPI( debug=params.debug, title=params.site_title, description=params.site_description, version=__version__, default_response_class=JSONResponse, **DOCS_PARAMS, ) # Add Event Handlers for startup in on_startup: app.add_event_handler("startup", startup)