def generate_inv_cache_hashes(inventory_path, targets, cache_paths): """ generates the hashes for the inventory per target and jsonnet/jinja2 folders for caching purposes struct: { inventory: <target>: classes: <sha256> parameters: <sha256> folder: components: <sha256> docs: <sha256> lib: <sha256> scripts: <sha256> ... } """ inv = inventory_reclass(inventory_path) cached.inv_cache = {} cached.inv_cache['inventory'] = {} cached.inv_cache['folder'] = {} if targets: for target in targets: try: cached.inv_cache['inventory'][target] = {} cached.inv_cache['inventory'][target]['classes'] = dictionary_hash(inv['nodes'][target]['classes']) cached.inv_cache['inventory'][target]['parameters'] = dictionary_hash(inv['nodes'][target]['parameters']) except KeyError as e: logger.error("'%s' target not found", target) raise else: for target in inv['nodes']: cached.inv_cache['inventory'][target] = {} cached.inv_cache['inventory'][target]['classes'] = dictionary_hash(inv['nodes'][target]['classes']) cached.inv_cache['inventory'][target]['parameters'] = dictionary_hash(inv['nodes'][target]['parameters']) compile_obj = inv['nodes'][target]['parameters']['kapitan']['compile'] for obj in compile_obj: for input_path in obj['input_paths']: base_folder = os.path.dirname(input_path).split('/')[0] if base_folder == '': base_folder = os.path.basename(input_path).split('/')[0] if base_folder not in cached.inv_cache['folder'].keys(): if os.path.exists(base_folder) and os.path.isdir(base_folder): cached.inv_cache['folder'][base_folder] = directory_hash(base_folder) # Cache additional folders set by --cache-paths for path in cache_paths: if path not in cached.inv_cache['folder'].keys(): if os.path.exists(path) and os.path.isdir(path): cached.inv_cache['folder'][path] = directory_hash(path) # Most commonly changed but not referenced in input_paths for common in ('lib', 'vendor', 'secrets'): if common not in cached.inv_cache['folder'].keys(): if os.path.exists(common) and os.path.isdir(common): cached.inv_cache['folder'][common] = directory_hash(common)
def generate_inv_cache_hashes(inventory_path, targets, cache_paths): """ generates the hashes for the inventory per target and jsonnet/jinja2 folders for caching purposes struct: { inventory: <target>: classes: <sha256> parameters: <sha256> folder: components: <sha256> docs: <sha256> lib: <sha256> scripts: <sha256> ... } """ inv = inventory_reclass(inventory_path) cached.inv_cache = {} cached.inv_cache["inventory"] = {} cached.inv_cache["folder"] = {} if targets: for target in targets: try: cached.inv_cache["inventory"][target] = {} cached.inv_cache["inventory"][target][ "classes"] = dictionary_hash( inv["nodes"][target]["classes"]) cached.inv_cache["inventory"][target][ "parameters"] = dictionary_hash( inv["nodes"][target]["parameters"]) except KeyError: raise CompileError("target not found: {}".format(target)) else: for target in inv["nodes"]: cached.inv_cache["inventory"][target] = {} cached.inv_cache["inventory"][target]["classes"] = dictionary_hash( inv["nodes"][target]["classes"]) cached.inv_cache["inventory"][target][ "parameters"] = dictionary_hash( inv["nodes"][target]["parameters"]) compile_obj = inv["nodes"][target]["parameters"]["kapitan"][ "compile"] for obj in compile_obj: for input_path in obj["input_paths"]: base_folder = os.path.dirname(input_path).split("/")[0] if base_folder == "": base_folder = os.path.basename(input_path).split( "/")[0] if base_folder not in cached.inv_cache["folder"].keys(): if os.path.exists(base_folder) and os.path.isdir( base_folder): cached.inv_cache["folder"][ base_folder] = directory_hash(base_folder) # Cache additional folders set by --cache-paths for path in cache_paths: if path not in cached.inv_cache["folder"].keys(): if os.path.exists(path) and os.path.isdir(path): cached.inv_cache["folder"][path] = directory_hash( path) # Most commonly changed but not referenced in input_paths for common in ("lib", "vendor", "secrets"): if common not in cached.inv_cache["folder"].keys(): if os.path.exists(common) and os.path.isdir(common): cached.inv_cache["folder"][common] = directory_hash(common)