Пример #1
0
def get_settings(hostname: Optional[str] = None):
    """Get settings to use for device matching hostname or global
    settings if no hostname is specified."""
    with open('/etc/cnaas-nms/repository.yml', 'r') as db_file:
        repo_config = yaml.safe_load(db_file)

    local_repo_path = repo_config['settings_local']
    try:
        verify_dir_structure(local_repo_path, DIR_STRUCTURE)
    except VerifyPathException as e:
        logger.exception(
            "Exception when verifying settings repository directory structure")
        raise e

    # 1. Get CNaaS-NMS default settings
    data_dir = pkg_resources.resource_filename(__name__, 'data')
    with open(os.path.join(data_dir, 'default_settings.yml'),
              'r') as f_default_settings:
        default_settings: dict = yaml.safe_load(f_default_settings)

    # 2. Get settings repo global settings
    with open(get_setting_filename(local_repo_path, ['global', 'base_system.yml']), 'r')\
            as f_g_base_sys:
        global_settings: dict = yaml.safe_load(f_g_base_sys)

        (merged_settings, merged_settings_metadata) = \
            merge_dict_origin(default_settings, global_settings, 'default', 'global')

        print(f_root(**merged_settings).dict())
        print(merged_settings_metadata)
Пример #2
0
 def post(self):
     json_data = request.get_json()
     syntax_dict, syntax_dict_origin = merge_dict_origin({}, json_data, {}, 'API POST data')
     try:
         ret = check_settings_syntax(syntax_dict, syntax_dict_origin)
     except SettingsSyntaxError as e:
         return empty_result(status='error', data=str(e)), 400
     else:
         return empty_result(status='success', data=ret)
Пример #3
0
def read_settings(local_repo_path: str, path: List[str], origin: str,
                  merged_settings, merged_settings_origin):
    with open(get_setting_filename(local_repo_path, path), 'r') as f:
        settings: dict = yaml.safe_load(f)
        if settings and isinstance(settings, dict):
            return merge_dict_origin(merged_settings, settings,
                                     merged_settings_origin, origin)
        else:
            return merged_settings, merged_settings_origin
Пример #4
0
def read_settings(local_repo_path: str,
                  path: List[str],
                  origin: str,
                  merged_settings,
                  merged_settings_origin,
                  groups: List[str] = None,
                  hostname: str = None) -> Tuple[dict, dict]:
    """

    Args:
        local_repo_path: Local path to settings repository
        path: Path to look for inside repo
        origin: What to name call this origin
        merged_settings: Existing settings
        merged_settings_origin: Existing settings origin info
        groups: Optional list of groups to filter on (using filter_yamldata)
        hostname: Optional hostname to filter on (using filter_yamldata)

    Returns:
        merged_settings, merged_settings_origin
    """
    logger = get_logger()
    filename = get_setting_filename(local_repo_path, path)
    yamldata = read_settings_file(filename)
    if not yamldata:
        return merged_settings, merged_settings_origin
    elif not isinstance(yamldata, dict):
        logger.info("Invalid yaml file ignored: {}".format(filename))
        return merged_settings, merged_settings_origin
    settings: dict = yamldata
    if groups or hostname:
        syntax_dict, syntax_dict_origin = merge_dict_origin({}, settings, {},
                                                            origin)
        check_settings_syntax(syntax_dict, syntax_dict_origin)
        settings = filter_yamldata(settings, groups, hostname)
    return merge_dict_origin(merged_settings, settings, merged_settings_origin,
                             origin)