#!/usr/bin/python2.7 """push_image This tool wraps docker push to handle image versions appropriately """ import sys import os import json import subprocess import shlex import config registry = config.get('REGISTRY_PREFIX') auth = config.get('AUTH_PREFIX') def load_versions(filename): if not os.path.exists(filename): print 'Can\'t find image_versions.json' sys.exit(1) t = json.loads(file(filename).read()) versions = {} for key in t: versions[key.encode('utf-8')] = t[key].encode('utf-8') return versions def main(): if len(sys.argv) == 1: print __doc__ sys.exit(1) image_name = sys.argv[1] tag_prefixes = sys.argv[2:] dir = os.path.dirname(os.path.abspath(sys.argv[0])) versions = load_versions(os.path.join(dir, 'image_versions.json')) # Does version exist for this image? if not versions.has_key(image_name): print 'Version not available for %s.' % image_name sys.exit(1) # Push the image image = '%s/%s:%s' % (registry, image_name, versions[image_name]) print 'Pushing image %s' % image s = '%s docker -- push %s' % (auth, image) return_code = subprocess.call(shlex.split(s)) if return_code != 0: print s print 'returned error %d' % return_code sys.exit(return_code) if __name__ == '__main__': main()