import pulumi import pulumi_docker as docker import json # Load the configuration from the JSON file with open('config.json') as f: config_data = json.load(f) # Create a Docker network network = docker.Network("testNetwork") # Initialize the containers list containers = [] # Initialize the URL dictionary for export urls = {} # Create containers based on the configuration for container in config_data["containers"]: container_name = container["name"] container_envs = [f"{key}={value}" for key, value in container.get("env", {}).items()] # Create the container docker_container = docker.Container( container_name, name=container_name, image=container["image"], envs=container_envs, ports=[docker.ContainerPortArgs( internal=port["internal"], external=port["external"] ) for port in container["ports"]], network_mode=network.name, command=container.get("command", None) or container.get("entrypoint", None), ##container.get("entrypoint", "/usr/local/bin/entrypoint.sh") volumes=[docker.ContainerVolumeArgs( host_path=vol["host_path"], container_path=vol["container_path"] ) for vol in container.get("volumes", [])] ) containers.append(docker_container) # Add the URLs for the container for port in container["ports"]: urls[f"{container_name}_url"] = f"http://localhost:{port['external']}" # Scale Prometheus containers for i in range(config_data.get("prometheus_scale", 1)): # Default to 1 if not specified prometheus_instance = docker.Container( f"prometheus-instance-{i}", name=f"prometheus-{i}", image="prom/prometheus:latest", ports=[docker.ContainerPortArgs(internal=9090, external=9090 + i)], network_mode=network.name ) containers.append(prometheus_instance) # Add the Prometheus URLs urls[f"prometheus_{i}_url"] = f"http://localhost:{9090 + i}" # Scale Fluentd containers fluentd_scale = config_data.get("fluentd_scale", 1) # Default to 1 if not specified for i in range(fluentd_scale): # This will scale based on the value from config_data fluentd_instance = docker.Container( f"fluentd-instance-{i}", name=f"fluentd-{i}", image="fluent/fluentd:v1.14-1", # Corrected image name ports=[docker.ContainerPortArgs(internal=24224, external=24224 + i)], # Assign unique external port for each container network_mode=network.name ) containers.append(fluentd_instance) # Add the Fluentd URLs urls[f"fluentd_{i}_url"] = f"http://localhost:{24224 + i}" # Export network and container details pulumi.export("network_name", network.name) pulumi.export("containers", [c.name for c in containers]) pulumi.export("urls", urls)