import yaml import json # Define the paths to your Docker Compose and Portainer app template files docker_compose_file = "docker-compose.yml" portainer_template_file = "portainer-template.json" # Load the Docker Compose file with open(docker_compose_file, 'r') as compose_file: compose_data = yaml.safe_load(compose_file) # Initialize an empty list to store new template entries new_template_entries = [] # Iterate through services in the Docker Compose file for service_name, service_config in compose_data.get("services", {}).items(): # Get the container name from the service configuration container_name = service_config.get("container_name", service_name) # Create a new template entry based on the service configuration new_template_entry = { "type": 1, "title": container_name, "description": "Description of the service", # Customize as needed "categories": ["SthopeDev"], # Customize as needed "platform": "linux", # Customize as needed "logo": "https://yourdomain.url/path/to/logo.png", # Replace with logo URL "image": service_config.get("image", ""), "ports": [f"{port}/tcp" for port in service_config.get("ports", [])], "volumes": [{"container": volume.split(":")[0], "bind": volume.split(":")[1]} for volume in service_config.get("volumes", [])], "environment": [{"name": env_var.split("=")[0], "label": env_var.split("=")[0], "default": env_var.split("=")[1]} for env_var in service_config.get("environment", [])], "restart": service_config.get("restart", "no"), "labels": service_config.get("labels", {}), # Add labels } # Check if "network_mode" is present and add it as "network" if "network_mode" in service_config: new_template_entry["network"] = service_config["network_mode"] # Check if "user" is present and add it if "user" in service_config: new_template_entry["user"] = service_config["user"] # Add the new template entry to the list new_template_entries.append(new_template_entry) # Load the existing Portainer app template file with open(portainer_template_file, 'r') as template_file: template_data = json.load(template_file) # Add the new template entries to the existing Portainer app template template_data["templates"].extend(new_template_entries) # Save the updated Portainer app template with open(portainer_template_file, 'w') as template_file: json.dump(template_data, template_file, indent=2) print("Services from the Docker Compose file have been added to the Portainer app template.")