def image_by_name(img_name, images=None): """ Returns a list of image data for images which match img_name. Will optionally take a list of images from a docker.Client.images query to avoid multiple docker queries. """ i_reg, i_rep, i_tag = _decompose(img_name) # Correct for bash-style matching expressions. if not i_reg: i_reg = '*' if not i_tag: i_tag = '*' # If the images were not passed in, go get them. if images is None: c = docker.Client() images = c.images(all=False) valid_images = [] for i in images: for t in i['RepoTags']: reg, rep, tag = _decompose(t) if matches(reg, i_reg) \ and matches(rep, i_rep) \ and matches(tag, i_tag): valid_images.append(i) break # Some repo after decompose end up with the img_name # at the end. i.e. rhel7/rsyslog if rep.endswith(img_name): valid_images.append(i) break return valid_images
def image_by_name(img_name, images=None): """ Returns a list of image data for images which match img_name. Will optionally take a list of images from a docker.Client.images query to avoid multiple docker queries. """ i_reg, i_rep, i_tag = _decompose(img_name) # Correct for bash-style matching expressions. if not i_reg: i_reg = '*' if not i_tag: i_tag = '*' # If the images were not passed in, go get them. if images is None: c = get_docker_client() images = c.images(all=False) valid_images = [] for i in images: for t in i['RepoTags']: reg, rep, tag = _decompose(t) if matches(reg, i_reg) \ and matches(rep, i_rep) \ and matches(tag, i_tag): valid_images.append(i) break # Some repo after decompose end up with the img_name # at the end. i.e. rhel7/rsyslog if rep.endswith(img_name): valid_images.append(i) break return valid_images
def image_by_name(img_name): """ Returns a list of image data for images which match img_name. """ def _decompose(compound_name): """ '[reg/]repo[:tag]' -> (reg, repo, tag) """ reg, repo, tag = '', compound_name, '' if '/' in repo: reg, repo = repo.split('/', 1) if ':' in repo: repo, tag = repo.rsplit(':', 1) return reg, repo, tag c = docker.Client() i_reg, i_rep, i_tag = _decompose(img_name) # Correct for bash-style matching expressions. if not i_reg: i_reg = '*' if not i_tag: i_tag = '*' images = c.images(all=False) valid_images = [] for i in images: for t in i['RepoTags']: reg, rep, tag = _decompose(t) if matches(reg, i_reg) \ and matches(rep, i_rep) \ and matches(tag, i_tag): valid_images.append(i) break return valid_images
def _identifier_as_cid(self, identifier): """ Returns a container uuid for identifier. If identifier is an image UUID or image tag, create a temporary container and return its uuid. """ def __cname_matches(container, identifier): return any([ n for n in (container['Names'] or []) if matches(n, '/' + identifier) ]) # Determine if identifier is a container containers = [ c['Id'] for c in self.d.containers(all=True) if (__cname_matches(c, identifier) or matches(c['Id'], identifier + '*')) ] if len(containers) > 1: raise SelectionMatchError(identifier, containers) elif len(containers) == 1: c = containers[0] return c if self.live else self._clone(c) # Determine if identifier is an image UUID images = [ i for i in set(self.d.images(all=True, quiet=True)) if i.startswith(identifier) ] if len(images) > 1: raise SelectionMatchError(identifier, images) elif len(images) == 1: return self._create_temp_container(images[0]) # Check if identifier is fully qualified # local import only from Atomic.objects.image import Image _image = Image(identifier) if _image.fully_qualified: return self._create_temp_container(identifier) # Match image tag. images = util.image_by_name(identifier) if len(images) > 1: tags = [t for i in images for t in i['RepoTags']] raise SelectionMatchError(identifier, tags) elif len(images) == 1: return self._create_temp_container(images[0]['Id'].replace( "sha256:", "")) raise MountError('{} did not match any image or container.' ''.format(identifier))
def image_by_name(img_name, images=None): # Returns a list of image data for images which match img_name. Will # optionally take a list of images from a docker.Client.images # query to avoid multiple docker queries. i_reg, i_rep, i_img, i_tag, _ = Decompose(img_name).all # Correct for bash-style matching expressions. if not i_reg: i_reg = '*' if not i_tag: i_tag = '*' # If the images were not passed in, go get them. if images is None: with AtomicDocker() as c: images = c.images(all=False) valid_images = [] for i in images: if not i["RepoTags"]: continue if img_name in i['RepoTags']: return [i] for t in i['RepoTags']: reg, rep, d_image, tag, _ = Decompose(t).all if matches(reg, i_reg) \ and matches(rep, i_rep) \ and matches(tag, i_tag) \ and matches(d_image, i_img): valid_images.append(i) break if matches(i_img, d_image) and matches(i_tag, tag): valid_images.append(i) break return valid_images
def _identifier_as_cid(self, identifier): """ Returns a container uuid for identifier. If identifier is an image UUID or image tag, create a temporary container and return its uuid. """ def __cname_matches(container, identifier): return any([n for n in (container['Names'] or []) if matches(n, '/' + identifier)]) # Determine if identifier is a container containers = [c['Id'] for c in self.d.containers(all=True) if (__cname_matches(c, identifier) or matches(c['Id'], identifier + '*'))] if len(containers) > 1: raise SelectionMatchError(identifier, containers) elif len(containers) == 1: c = containers[0] return c if self.live else self._clone(c) # Determine if identifier is an image UUID images = [i for i in set(self.d.images(all=True, quiet=True)) if i.startswith(identifier)] if len(images) > 1: raise SelectionMatchError(identifier, images) elif len(images) == 1: return self._create_temp_container(images[0]) # Check if identifier is fully qualified # local import only from Atomic.objects.image import Image _image = Image(identifier) if _image.fully_qualified: return self._create_temp_container(identifier) # Match image tag. images = util.image_by_name(identifier) if len(images) > 1: tags = [t for i in images for t in i['RepoTags']] raise SelectionMatchError(identifier, tags) elif len(images) == 1: return self._create_temp_container(images[0]['Id'].replace("sha256:", "")) raise MountError('{} did not match any image or container.' ''.format(identifier))
def _identifier_as_cid(self, identifier): """ Returns a container uuid for identifier. If identifier is an image UUID or image tag, create a temporary container and return its uuid. """ def __cname_matches(container, identifier): return any([ n for n in container['Names'] if matches(n, '/' + identifier) ]) # Determine if identifier is a container containers = [ c['Id'] for c in self.client.containers(all=True) if (__cname_matches(c, identifier) or matches(c['Id'], identifier + '*')) ] if len(containers) > 1: raise SelectionMatchError(identifier, containers) elif len(containers) == 1: c = containers[0] return c if self.live else self._clone(c) # Determine if identifier is an image UUID images = [ i for i in set(self.client.images(all=True, quiet=True)) if i.startswith(identifier) ] if len(images) > 1: raise SelectionMatchError(identifier, images) elif len(images) == 1: return self._create_temp_container(images[0]) # Match image tag. images = util.image_by_name(identifier) if len(images) > 1: tags = [t for i in images for t in i['RepoTags']] raise SelectionMatchError(identifier, tags) elif len(images) == 1: return self._create_temp_container(images[0]['Id']) raise MountError('{} did not match any image or container.' ''.format(identifier))
def _identifier_as_cid(self, identifier): """ Returns a container uuid for identifier. If identifier is an image UUID or image tag, create a temporary container and return its uuid. """ def __cname_matches(container, identifier): return any([n for n in container['Names'] if matches(n, '/' + identifier)]) # Determine if identifier is a container containers = [c['Id'] for c in self.client.containers(all=True) if (__cname_matches(c, identifier) or matches(c['Id'], identifier + '*'))] if len(containers) > 1: raise SelectionMatchError(identifier, containers) elif len(containers) == 1: c = containers[0] return c if self.live else self._clone(c) # Determine if identifier is an image UUID images = [i for i in set(self.client.images(all=True, quiet=True)) if i.startswith(identifier)] if len(images) > 1: raise SelectionMatchError(identifier, images) elif len(images) == 1: return self._create_temp_container(images[0]) # Match image tag. images = util.image_by_name(identifier) if len(images) > 1: tags = [t for i in images for t in i['RepoTags']] raise SelectionMatchError(identifier, tags) elif len(images) == 1: return self._create_temp_container(images[0]['Id']) raise MountError('{} did not match any image or container.' ''.format(identifier))
def __cname_matches(container, identifier): return any([n for n in container['Names'] if matches(n, '/' + identifier)])
def __cname_matches(container, identifier): return any([ n for n in (container['Names'] or []) if matches(n, '/' + identifier) ])
action="count", default=0, help="increase logging output [%default]") opt, args = _o.parse_args() logging.basicConfig(level=logging.WARNING - 10 * opt.verbose) topsrcdir = opt.topsrcdir testdatdir = opt.testdatadir mkzip = opt.mkzip unzip = opt.unzip exeext = opt.exeext if not args: args += ["test_"] suite = unittest.TestSuite() for arg in args: for classname in sorted(list(globals())): if not classname.endswith("Test"): continue testclass = globals()[classname] for method in sorted(dir(testclass)): if "*" not in arg: arg += "*" if arg.startswith("_"): arg = arg[1:] if matches(method, arg): suite.addTest(testclass(method)) # TextTestRunner(verbosity=opt.verbose).run(suite) if opt.xmlresults: import xmlrunner Runner = xmlrunner.XMLTestRunner Runner(xmlresults).run(suite) else: Runner = unittest.TextTestRunner Runner(verbosity=opt.verbose).run(suite)