Merge pull request #5 from odoucet/master
Make script Python 2.6 compatible
This commit is contained in:
44
registry.py
Normal file → Executable file
44
registry.py
Normal file → Executable file
@@ -71,13 +71,13 @@ class Registry:
|
|||||||
def send(self, path, method="GET"):
|
def send(self, path, method="GET"):
|
||||||
try:
|
try:
|
||||||
result = requests.request(
|
result = requests.request(
|
||||||
method, "{}{}".format(self.hostname, path),
|
method, "{0}{1}".format(self.hostname, path),
|
||||||
headers = self.HEADERS,
|
headers = self.HEADERS,
|
||||||
auth=(None if self.username == ""
|
auth=(None if self.username == ""
|
||||||
else (self.username, self.password)))
|
else (self.username, self.password)))
|
||||||
|
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
print "cannot connect to {}\nerror {}".format(
|
print "cannot connect to {0}\nerror {1}".format(
|
||||||
self.hostname,
|
self.hostname,
|
||||||
error)
|
error)
|
||||||
exit(1)
|
exit(1)
|
||||||
@@ -96,7 +96,7 @@ class Registry:
|
|||||||
return json.loads(result.text)['repositories']
|
return json.loads(result.text)['repositories']
|
||||||
|
|
||||||
def list_tags(self, image_name):
|
def list_tags(self, image_name):
|
||||||
result = self.send("/v2/{}/tags/list".format(image_name))
|
result = self.send("/v2/{0}/tags/list".format(image_name))
|
||||||
if result == None:
|
if result == None:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
@@ -108,12 +108,12 @@ class Registry:
|
|||||||
return tags_list
|
return tags_list
|
||||||
|
|
||||||
def get_tag_digest(self, image_name, tag):
|
def get_tag_digest(self, image_name, tag):
|
||||||
image_headers = self.send("/v2/{}/manifests/{}".format(
|
image_headers = self.send("/v2/{0}/manifests/{1}".format(
|
||||||
image_name, tag), method="HEAD")
|
image_name, tag), method="HEAD")
|
||||||
|
|
||||||
if image_headers == None:
|
if image_headers == None:
|
||||||
|
|
||||||
print " tag digest not found: {}".format(self.__error)
|
print " tag digest not found: {0}".format(self.__error)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
tag_digest = image_headers.headers['Docker-Content-Digest']
|
tag_digest = image_headers.headers['Docker-Content-Digest']
|
||||||
@@ -122,7 +122,7 @@ class Registry:
|
|||||||
|
|
||||||
def delete_tag(self, image_name, tag, dry_run):
|
def delete_tag(self, image_name, tag, dry_run):
|
||||||
if dry_run:
|
if dry_run:
|
||||||
print 'would delete tag {}'.format(tag)
|
print 'would delete tag {0}'.format(tag)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
tag_digest = self.get_tag_digest(image_name, tag)
|
tag_digest = self.get_tag_digest(image_name, tag)
|
||||||
@@ -130,11 +130,11 @@ class Registry:
|
|||||||
if tag_digest == None:
|
if tag_digest == None:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
delete_result = self.send("/v2/{}/manifests/{}".format(
|
delete_result = self.send("/v2/{0}/manifests/{1}".format(
|
||||||
image_name, tag_digest), method="DELETE")
|
image_name, tag_digest), method="DELETE")
|
||||||
|
|
||||||
if delete_result == None:
|
if delete_result == None:
|
||||||
print "failed, error: {}".format(self.__error)
|
print "failed, error: {0}".format(self.__error)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print "done"
|
print "done"
|
||||||
@@ -142,16 +142,16 @@ class Registry:
|
|||||||
|
|
||||||
def delete_tag_layer(self, image_name, layer_digest, dry_run):
|
def delete_tag_layer(self, image_name, layer_digest, dry_run):
|
||||||
if dry_run:
|
if dry_run:
|
||||||
print 'would delete layer {}'.format(layer_digest)
|
print 'would delete layer {0}'.format(layer_digest)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print 'deleting layer {}'.format(layer_digest),
|
print 'deleting layer {0}'.format(layer_digest),
|
||||||
|
|
||||||
delete_result = self.send('/v2/{}/blobs/{}'.format(
|
delete_result = self.send('/v2/{0}/blobs/{1}'.format(
|
||||||
image_name, layer_digest), method='DELETE')
|
image_name, layer_digest), method='DELETE')
|
||||||
|
|
||||||
if delete_result == None:
|
if delete_result == None:
|
||||||
print "failed, error: {}".format(self.__error)
|
print "failed, error: {0}".format(self.__error)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print "done"
|
print "done"
|
||||||
@@ -159,11 +159,11 @@ class Registry:
|
|||||||
|
|
||||||
|
|
||||||
def list_tag_layers(self, image_name, tag):
|
def list_tag_layers(self, image_name, tag):
|
||||||
layers_result = self.send("/v2/{}/manifests/{}".format(
|
layers_result = self.send("/v2/{0}/manifests/{1}".format(
|
||||||
image_name, tag))
|
image_name, tag))
|
||||||
|
|
||||||
if layers_result == None:
|
if layers_result == None:
|
||||||
print "error {}".format(self.__error)
|
print "error {0}".format(self.__error)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if json.loads(layers_result.text)['schemaVersion'] == 1:
|
if json.loads(layers_result.text)['schemaVersion'] == 1:
|
||||||
@@ -207,7 +207,7 @@ for more detail on garbage collection read here:
|
|||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-d','--delete',
|
'-d','--delete',
|
||||||
help=('If specified, delete all but last {} tags '
|
help=('If specified, delete all but last {0} tags '
|
||||||
'of all images').format(CONST_KEEP_LAST_VERSIONS),
|
'of all images').format(CONST_KEEP_LAST_VERSIONS),
|
||||||
action='store_const',
|
action='store_const',
|
||||||
default=False,
|
default=False,
|
||||||
@@ -216,7 +216,7 @@ for more detail on garbage collection read here:
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-n','--num',
|
'-n','--num',
|
||||||
help=('Set the number of tags to keep'
|
help=('Set the number of tags to keep'
|
||||||
'({} if not set)').format(CONST_KEEP_LAST_VERSIONS),
|
'({0} if not set)').format(CONST_KEEP_LAST_VERSIONS),
|
||||||
default=CONST_KEEP_LAST_VERSIONS,
|
default=CONST_KEEP_LAST_VERSIONS,
|
||||||
nargs='?',
|
nargs='?',
|
||||||
metavar='N')
|
metavar='N')
|
||||||
@@ -257,7 +257,7 @@ def delete_tags(
|
|||||||
registry, image_name, dry_run, tags_to_delete):
|
registry, image_name, dry_run, tags_to_delete):
|
||||||
|
|
||||||
for tag in tags_to_delete:
|
for tag in tags_to_delete:
|
||||||
print " deleting tag {}".format(tag)
|
print " deleting tag {0}".format(tag)
|
||||||
|
|
||||||
## deleting layers is disabled because
|
## deleting layers is disabled because
|
||||||
## it also deletes shared layers
|
## it also deletes shared layers
|
||||||
@@ -275,7 +275,7 @@ def main_loop(args):
|
|||||||
|
|
||||||
registry = Registry(args.host, args.login)
|
registry = Registry(args.host, args.login)
|
||||||
if args.delete:
|
if args.delete:
|
||||||
print "Will delete all but {} last tags".format(keep_last_versions)
|
print "Will delete all but {0} last tags".format(keep_last_versions)
|
||||||
|
|
||||||
if args.image != None:
|
if args.image != None:
|
||||||
image_list = args.image
|
image_list = args.image
|
||||||
@@ -285,7 +285,7 @@ def main_loop(args):
|
|||||||
# loop through registry's images
|
# loop through registry's images
|
||||||
# or through the ones given in command line
|
# or through the ones given in command line
|
||||||
for image_name in image_list:
|
for image_name in image_list:
|
||||||
print "Image: {}".format(image_name)
|
print "Image: {0}".format(image_name)
|
||||||
|
|
||||||
# get tags from arguments if any
|
# get tags from arguments if any
|
||||||
if ":" in image_name:
|
if ":" in image_name:
|
||||||
@@ -300,14 +300,14 @@ def main_loop(args):
|
|||||||
|
|
||||||
# print tags and optionally layers
|
# print tags and optionally layers
|
||||||
for tag in tags_list:
|
for tag in tags_list:
|
||||||
print " tag: {}".format(tag)
|
print " tag: {0}".format(tag)
|
||||||
if args.layers:
|
if args.layers:
|
||||||
for layer in registry.list_tag_layers(image_name, tag):
|
for layer in registry.list_tag_layers(image_name, tag):
|
||||||
if layer.has_key('size'):
|
if layer.has_key('size'):
|
||||||
print " layer: {}, size: {}".format(
|
print " layer: {0}, size: {1}".format(
|
||||||
layer['digest'], layer['size'])
|
layer['digest'], layer['size'])
|
||||||
else:
|
else:
|
||||||
print " layer: {}".format(
|
print " layer: {0}".format(
|
||||||
layer['blobSum'])
|
layer['blobSum'])
|
||||||
|
|
||||||
# delete tags if told so
|
# delete tags if told so
|
||||||
|
|||||||
Reference in New Issue
Block a user