Last active
March 15, 2016 16:06
-
-
Save brianwebb01/1144570647ae647f28a5 to your computer and use it in GitHub Desktop.
Python script to watch a Docker Cloud service for redeployment
This file contains hidden or 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
#!/usr/bin/python | |
import dockercloud | |
import logging | |
import json | |
import signal | |
import sys | |
import os | |
# To use this script you'll need to set the following environment variables | |
# | |
# DOCKERCLOUD_USER - docker cloud user | |
# DOCKERCLOUD_APIKEY - docker cloud api key | |
# DOCKERCLOUD_WATCH_SVC - the docker cloud UUID of the service you want to watch | |
logger = logging.getLogger("docker-cloud-watcher") | |
def get_uuid_from_resource_uri(uri): | |
terms = uri.strip("/").split("/") | |
if len(terms) < 2: | |
return "" | |
return terms[-1] | |
def on_websocket_open(): | |
logger.info("websocket opened") | |
def on_websocket_close(): | |
logger.info("websocket closed") | |
def on_cloud_event(message): | |
try: | |
event = json.loads(message) | |
except ValueError: | |
logger.info("event is not a valid json message") | |
return | |
uuid = get_uuid_from_resource_uri(event.get("resource_uri", "")) | |
if event.get("state", "") not in ["In progress", "Pending", "Terminating", "Starting", "Scaling", "Stopping", "Running"] and \ | |
event.get("type", "").lower() in ["service"] and \ | |
uuid == os.getenv("DOCKERCLOUD_WATCH_SVC"): | |
msg = "\n\nDocker Cloud Event: %s %s is %s\n" % (event["type"], uuid, event["state"].lower()) | |
logger.info(msg) | |
def listen_dockercloud_events(): | |
events = dockercloud.Events() | |
events.on_open(on_websocket_open) | |
events.on_close(on_websocket_close) | |
events.on_message(on_cloud_event) | |
events.run_forever() | |
def main(): | |
logging.basicConfig(stream=sys.stdout) | |
logging.getLogger("docker-cloud-watcher").setLevel(logging.DEBUG) | |
signal.signal(signal.SIGTERM, sys.exit) | |
if os.environ.has_key("DOCKERCLOUD_USER") == False or os.environ.has_key("DOCKERCLOUD_APIKEY") == False: | |
print "Docker cloud environment variables (DOCKERCLOUD_USER, DOCKERCLOUD_APIKEY, DOCKERCLOUD_WATCH_SVC) are not set!!!" | |
exit() | |
listen_dockercloud_events() | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment