Last active
November 7, 2020 04:11
-
-
Save pjgeutjens/77eaeef25c136f6291f5a8450bfba8b3 to your computer and use it in GitHub Desktop.
generate tmuxinator config for all services in a docker-compose.yml file, with color output
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import yaml | |
import argparse | |
parser = argparse.ArgumentParser(description="Show docker logs in tmuxinator session") | |
parser.add_argument( | |
"-d", "--delay", help="delay in seconds before opening logs", default=5 | |
) | |
parser.add_argument("-o", "--out", help="output file path", default="tmuxinator.yml") | |
parser.add_argument("-l", "--layout", help="tmuxinator layout", default="tiled") | |
parser.add_argument( | |
"-c", "--colorize", help="colorize output, requires xcolorize", action="store_true" | |
) | |
args = parser.parse_args() | |
colors = ["yellow", "red", "cyan", "purple", "pink", "fawn"] | |
def populateConfig(log_panes, layout): | |
configIn = { | |
"name": "docker-logs", | |
"root": ".", | |
"windows": [{"logs": {"layout": layout, "panes": log_panes}}], | |
} | |
configOut = yaml.dump(configIn) | |
return configOut | |
if __name__ == "__main__": | |
try: | |
docker_config = open("docker-compose.yaml").read() | |
except IOError: | |
docker_config = open("docker-compose.yml").read() | |
config = yaml.load(docker_config, Loader=yaml.FullLoader) | |
services = list(config["services"].keys()) | |
log_panes = list() | |
log_panes.append( | |
"clear && docker-compose up -d" | |
) # add a first pane to spin up the containers | |
for i, s in enumerate(services): | |
# build docker-compose logs command, including delay to allow container spinup | |
panel_command = f"sleep {args.delay} && clear && docker-compose logs -f {s}" | |
if args.colorize: | |
panel_command += ( | |
f"| xcolorize --unbuffered {colors[i % len(colors)]} '{s}.+'" | |
) | |
log_panes.append(panel_command) | |
tmux_config = populateConfig(log_panes, args.layout) | |
with open(args.out, "w") as outFile: | |
outFile.write(tmux_config) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment