parent
e85a15385e
commit
77d73f6808
@ -1,94 +0,0 @@
|
|||||||
import os
|
|
||||||
import yaml
|
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
SECRET_DIR = "configmaps"
|
|
||||||
OUTPUT_YML = "config_mappings.yml"
|
|
||||||
PLACEHOLDER_PREFIX = "PH_"
|
|
||||||
|
|
||||||
secret_mappings = {}
|
|
||||||
common_values = defaultdict(int)
|
|
||||||
value_to_placeholder = {}
|
|
||||||
value_to_first_key = {}
|
|
||||||
value_to_first_file = {}
|
|
||||||
|
|
||||||
def find_common_values(obj, parent_key=None, filename=None):
|
|
||||||
if isinstance(obj, dict):
|
|
||||||
for k, v in obj.items():
|
|
||||||
find_common_values(v, k, filename)
|
|
||||||
elif isinstance(obj, list):
|
|
||||||
for item in obj:
|
|
||||||
find_common_values(item, parent_key, filename)
|
|
||||||
elif isinstance(obj, str):
|
|
||||||
common_values[obj] += 1
|
|
||||||
if obj not in value_to_first_key:
|
|
||||||
value_to_first_key[obj] = parent_key
|
|
||||||
value_to_first_file[obj] = filename
|
|
||||||
|
|
||||||
def replace_common_values(obj):
|
|
||||||
global modified
|
|
||||||
if isinstance(obj, dict):
|
|
||||||
for k, v in obj.items():
|
|
||||||
if isinstance(v, str) and common_values[v] > 1:
|
|
||||||
if v not in value_to_placeholder:
|
|
||||||
placeholder = (
|
|
||||||
f"{PLACEHOLDER_PREFIX}{value_to_first_key[v].replace('-', '_').upper()}_"
|
|
||||||
f"{value_to_first_file[v].replace('.', '_').upper()}"
|
|
||||||
)
|
|
||||||
value_to_placeholder[v] = placeholder
|
|
||||||
obj[k] = value_to_placeholder[v]
|
|
||||||
secret_mappings[value_to_placeholder[v]] = v
|
|
||||||
modified = True
|
|
||||||
elif isinstance(v, str) and "\n" in v: # Handle multi-line strings
|
|
||||||
lines = v.split("\n")
|
|
||||||
for i, line in enumerate(lines):
|
|
||||||
if line.strip() in common_values and common_values[line.strip()] > 1:
|
|
||||||
if line.strip() not in value_to_placeholder:
|
|
||||||
placeholder = (
|
|
||||||
f"{PLACEHOLDER_PREFIX}{value_to_first_key[line.strip()].replace('-', '_').upper()}_"
|
|
||||||
f"{value_to_first_file[line.strip()].replace('.', '_').upper()}"
|
|
||||||
)
|
|
||||||
value_to_placeholder[line.strip()] = placeholder
|
|
||||||
lines[i] = value_to_placeholder[line.strip()]
|
|
||||||
secret_mappings[value_to_placeholder[line.strip()]] = line.strip()
|
|
||||||
modified = True
|
|
||||||
obj[k] = "\n".join(lines) # Preserve formatting
|
|
||||||
else:
|
|
||||||
replace_common_values(v)
|
|
||||||
elif isinstance(obj, list):
|
|
||||||
for i, item in enumerate(obj):
|
|
||||||
if isinstance(item, str) and common_values[item] > 1:
|
|
||||||
if item not in value_to_placeholder:
|
|
||||||
placeholder = f"{PLACEHOLDER_PREFIX}{i}_{value_to_first_file[item].replace('.', '_').upper()}"
|
|
||||||
value_to_placeholder[item] = placeholder
|
|
||||||
obj[i] = value_to_placeholder[item]
|
|
||||||
secret_mappings[value_to_placeholder[item]] = item
|
|
||||||
modified = True
|
|
||||||
else:
|
|
||||||
replace_common_values(item)
|
|
||||||
|
|
||||||
# First pass: Identify common values
|
|
||||||
for filename in os.listdir(SECRET_DIR):
|
|
||||||
if filename.endswith(".yml") or filename.endswith(".yaml"):
|
|
||||||
file_path = os.path.join(SECRET_DIR, filename)
|
|
||||||
with open(file_path, "r") as file:
|
|
||||||
data = yaml.safe_load(file)
|
|
||||||
find_common_values(data, filename=filename)
|
|
||||||
|
|
||||||
# Second pass: Replace common values
|
|
||||||
for filename in os.listdir(SECRET_DIR):
|
|
||||||
if filename.endswith(".yml") or filename.endswith(".yaml"):
|
|
||||||
file_path = os.path.join(SECRET_DIR, filename)
|
|
||||||
with open(file_path, "r") as file:
|
|
||||||
data = yaml.safe_load(file)
|
|
||||||
modified = False
|
|
||||||
replace_common_values(data)
|
|
||||||
if modified:
|
|
||||||
with open(file_path, "w") as file:
|
|
||||||
yaml.safe_dump(data, file, default_flow_style=False)
|
|
||||||
|
|
||||||
# Save mappings
|
|
||||||
with open(OUTPUT_YML, "w") as yamlfile:
|
|
||||||
yaml.safe_dump(secret_mappings, yamlfile, default_flow_style=False)
|
|
||||||
|
|
||||||
print(f"Processing completed. Placeholder mappings saved in {OUTPUT_YML}.")
|
|
Loading…
Reference in new issue