Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. """\
  2. Find dependent images for a given Docker image ID.
  3. """
  4.  
  5. import argparse
  6. import docker
  7.  
  8.  
  9. def find_img(img_idx, id):
  10. try:
  11. return img_idx[id]
  12. except KeyError:
  13. for k, v in img_idx.items():
  14. if k.rsplit(":", 1)[-1].startswith(id):
  15. return v
  16. raise RuntimeError("No image with ID: %s" % id)
  17.  
  18.  
  19. def get_children(img_idx):
  20. rval = {}
  21. for img in img_idx.values():
  22. p_id = img.attrs["Parent"]
  23. rval.setdefault(p_id, set()).add(img.id)
  24. return rval
  25.  
  26.  
  27. def print_descendants(img_idx, children_map, img_id, indent=0):
  28. children_ids = children_map.get(img_id, [])
  29. for id in children_ids:
  30. child = img_idx[id]
  31. print(" " * indent, id, child.tags)
  32. print_descendants(img_idx, children_map, id, indent=indent+2)
  33.  
  34.  
  35. def main(args):
  36. client = docker.from_env()
  37. img_idx = {_.id: _ for _ in client.images.list(all=True)}
  38. img = find_img(img_idx, args.id)
  39. children_map = get_children(img_idx)
  40. print_descendants(img_idx, children_map, img.id)
  41.  
  42.  
  43. if __name__ == "__main__":
  44. parser = argparse.ArgumentParser(description=__doc__)
  45. parser.add_argument("id", metavar="IMAGE_ID")
  46. main(parser.parse_args())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement