Skip to content

Instantly share code, notes, and snippets.

@brianwebb01
Last active March 15, 2016 16:06
Show Gist options
  • Save brianwebb01/1144570647ae647f28a5 to your computer and use it in GitHub Desktop.
Save brianwebb01/1144570647ae647f28a5 to your computer and use it in GitHub Desktop.
Python script to watch a Docker Cloud service for redeployment
#!/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