예제 #1
0
    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'))
예제 #2
0
 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')
         })
예제 #3
0
파일: parse.py 프로젝트: tern-tools/tern
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
예제 #4
0
 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')
         })
예제 #5
0
    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])