You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.5 KiB

# chiedi la password di sblocco
import os
import re
import getpass
from pykeepass import PyKeePass
# Generator: finds all "docker-compose.template.yml" in subdirectories from rootdir
def getDockerComposeFiles(rootdir = '.'):
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file == "docker-compose.template.yml":
yield os.path.join(subdir, file)
def main():
# Dictionary with all services secrets
subDict = {}
print("Unlock password database: ")
dbpass = getpass.getpass(prompt='Password: ', stream=None)
# Populate dictionary
with PyKeePass('secrets.kdbx', password=dbpass) as kp:
for key in kp.entries:
service = key.title
subDict[service+".username"] = key.username
subDict[service+".password"] = key.password
# Scan all yml files for placeholders in form of ${service.username} and ${service.password} and apply
for filename in getDockerComposeFiles('yml'):
with open(filename, 'r') as f:
applied = re.sub('\$\{(.*?)\}', lambda x: subDict[],
except KeyError as e:
print(f"Could not patch {filename}, key {e.args[0]} not found")
filename=filename.replace(".template", "")
print("writing to " + filename)
with open(filename, 'w') as f: