mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-03-02 17:30:20 +00:00
60 lines
2.0 KiB
Python
Executable File
60 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import yaml
|
|
|
|
stack = yaml.load(open(sys.argv[1]))
|
|
|
|
project_name = os.path.basename(os.path.realpath("."))
|
|
|
|
# Get all services in our compose application
|
|
containers_data = subprocess.check_output([
|
|
"docker", "ps",
|
|
"--filter", "label=com.docker.compose.project={}".format(project_name),
|
|
"--format", '{{ .ID }} {{ .Label "com.docker.compose.service" }}',
|
|
])
|
|
|
|
# Get all existing ambassadors for this application
|
|
ambassadors_data = subprocess.check_output([
|
|
"docker", "ps",
|
|
"--filter", "label=ambassador.project={}".format(project_name),
|
|
"--format", '{{ .ID }} '
|
|
'{{ .Label "ambassador.container" }} '
|
|
'{{ .Label "ambassador.service" }}',
|
|
])
|
|
|
|
# Build a set of existing ambassadors
|
|
ambassadors = dict()
|
|
for ambassador in ambassadors_data.split('\n'):
|
|
if not ambassador:
|
|
continue
|
|
ambassador_id, container_id, linked_service = ambassador.split()
|
|
ambassadors[container_id, linked_service] = ambassador_id
|
|
|
|
# Start the missing ambassadors
|
|
for container in containers_data.split('\n'):
|
|
if not container:
|
|
continue
|
|
container_id, service_name = container.split()
|
|
extra_hosts = stack[service_name].get("extra_hosts", {})
|
|
for linked_service, bind_address in extra_hosts.items():
|
|
description = "Ambassador {}/{}/{}".format(
|
|
service_name, container_id, linked_service)
|
|
ambassador_id = ambassadors.get((container_id, linked_service))
|
|
if ambassador_id:
|
|
print("{} already exists: {}".format(description, ambassador_id))
|
|
else:
|
|
print("{} not found, creating it:".format(description))
|
|
subprocess.check_call([
|
|
"docker", "run", "-d",
|
|
"--net", "container:{}".format(container_id),
|
|
"--label", "ambassador.project={}".format(project_name),
|
|
"--label", "ambassador.container={}".format(container_id),
|
|
"--label", "ambassador.service={}".format(linked_service),
|
|
"--label", "ambassador.bindaddr={}".format(bind_address),
|
|
"jpetazzo/hamba", "run"
|
|
])
|
|
|