def __init__(self, repotag=None): '''Initialize using repotag''' super().__init__(repotag) self.__repotags = [] self.__history = None if self.repotag is None: raise NameError("Image object initialized with no repotag") # parse the repotag repo_dict = general.parse_image_string(self._repotag) self._name = repo_dict.get('name') self._tag = repo_dict.get('tag') self.set_checksum( repo_dict.get('digest_type'), repo_dict.get('digest')) if not self.checksum and general.check_tar(repotag) is False: # if there is no checksum, get the digest type docker_image = container.check_image(self._repotag) # this object could be representing an image built from # a Dockerfile, so it may not have a digest # so check for that condition if docker_image.attrs['RepoDigests']: image_name_digest = container.get_image_digest(docker_image) repo_dict = general.parse_image_string(image_name_digest) self.set_checksum( repo_dict.get('digest_type'), repo_dict.get('digest'))
def testParseImageString(self): hello = 'hello-world' debian = 'debian:9.8-slim' distroless = 'gcr.io/distroless/static' resizer = 'gcr.io/google-containers/addon-resizer:2.3' etcd = ('bitnami/etcd@sha256:35862e29b27efd97cdf4a1fc79abc1341feac556' '32e4256b02e6cfee9a4b6455') self.assertEqual(general.parse_image_string(hello), { 'name': 'hello-world', 'tag': '', 'digest_type': '', 'digest': '' }) self.assertEqual(general.parse_image_string(debian), { 'name': 'debian', 'tag': '9.8-slim', 'digest_type': '', 'digest': '' }) self.assertEqual( general.parse_image_string(distroless), { 'name': 'gcr.io/distroless/static', 'tag': '', 'digest_type': '', 'digest': '' }) self.assertEqual( general.parse_image_string(resizer), { 'name': 'gcr.io/google-containers/addon-resizer', 'tag': '2.3', 'digest_type': '', 'digest': '' }) self.assertEqual( general.parse_image_string(etcd), { 'name': 'bitnami/etcd', 'tag': '', 'digest_type': 'sha256', 'digest': ('35862e29b27efd97cdf4a1fc79abc1341fe' 'ac55632e4256b02e6cfee9a4b6455') })
def parse_from_image(dfobj): '''Get a list of dictionaries from the FROM instruction. The dictionary should be of the form: [{'name': <image name used (either from dockerhub or full name)>, 'tag': <image tag>, 'digest_type': <the hashing algorithm used> 'digest': <image digest>}..]''' image_list = [] for image_string in dfobj.parent_images: image_list.append(general.parse_image_string(image_string)) return image_list
def testParseImageString(self): hello = 'hello-world' debian = 'debian:9.8-slim' distroless = 'gcr.io/distroless/static' resizer = 'gcr.io/google-containers/addon-resizer:2.3' etcd = ('bitnami/etcd@sha256:35862e29b27efd97cdf4a1fc79abc1341feac556' '32e4256b02e6cfee9a4b6455') nexus = ( 'nexus3.onap.org:10001/onap/so/so-oof-adapter@sha256:d7e1f739ba732c' '853a638f9c90becd5e0f8d313c8d506567b0b83ac38a1d53cb') self.assertEqual(general.parse_image_string(hello), { 'name': 'hello-world', 'tag': '', 'digest_type': '', 'digest': '' }) self.assertEqual(general.parse_image_string(debian), { 'name': 'debian', 'tag': '9.8-slim', 'digest_type': '', 'digest': '' }) self.assertEqual( general.parse_image_string(distroless), { 'name': 'gcr.io/distroless/static', 'tag': '', 'digest_type': '', 'digest': '' }) self.assertEqual( general.parse_image_string(resizer), { 'name': 'gcr.io/google-containers/addon-resizer', 'tag': '2.3', 'digest_type': '', 'digest': '' }) self.assertEqual( general.parse_image_string(etcd), { 'name': 'bitnami/etcd', 'tag': '', 'digest_type': 'sha256', 'digest': ('35862e29b27efd97cdf4a1fc79abc1341fe' 'ac55632e4256b02e6cfee9a4b6455') }) self.assertEqual( general.parse_image_string(nexus), { 'name': 'nexus3.onap.org:10001/onap/so/so-oof-adapter', 'tag': '', 'digest_type': 'sha256', 'digest': ('d7e1f739ba732c853a638f9c90becd5e0f8' 'd313c8d506567b0b83ac38a1d53cb') })
def __init__(self, repotag=None, repo_digest=None): '''Initialize using repotag''' super().__init__(repotag) self.__repotags = [] self.__history = None if self.repotag is None: raise NameError("Image object initialized with no repotag") # parse the repotag repo_dict = general.parse_image_string(self._repotag) self._name = repo_dict.get('name') self._tag = repo_dict.get('tag') self.set_checksum(repo_dict.get('digest_type'), repo_dict.get('digest')) if not self.checksum and general.check_tar(repotag) is False: # see if we can set it via the repo_digest string if repo_digest and ':' in repo_digest: repo_digest_list = repo_digest.split(':') self.set_checksum(repo_digest_list[0], repo_digest_list[1])