def main(): args = parser.parse_args() if not args.name or not args.directory: raise Exception('--name and --directory are required arguments.') transport = transport_pool.Http(httplib2.Http, size=_THREADS) if '@' in args.name: name = docker_name.Digest(args.name) else: name = docker_name.Tag(args.name) # OCI Image Manifest is compatible with Docker Image Manifest Version 2, # Schema 2. We indicate support for both formats by passing both media types # as 'Accept' headers. # # For reference: # OCI: https://github.com/opencontainers/image-spec # Docker: https://docs.docker.com/registry/spec/manifest-v2-2/ accept = docker_http.SUPPORTED_MANIFEST_MIMES # Resolve the appropriate credential to use based on the standard Docker # client logic. creds = docker_creds.DefaultKeychain.Resolve(name) with v2_2_image.FromRegistry(name, creds, transport, accept) as v2_2_img: if v2_2_img.exists(): save.fast(v2_2_img, args.directory, threads=_THREADS) return with v2_image.FromRegistry(name, creds, transport) as v2_img: with v2_compat.V22FromV2(v2_img) as v2_2_img: save.fast(v2_2_img, args.directory, threads=_THREADS) return
def main(): args = parser.parse_args() if not args.name or not args.directory: raise Exception('--name and --directory are required arguments.') transport = transport_pool.Http(httplib2.Http, size=_THREADS) if '@' in args.name: name = docker_name.Digest(args.name) else: name = docker_name.Tag(args.name) # Resolve the appropriate credential to use based on the standard Docker # client logic. creds = docker_creds.DefaultKeychain.Resolve(name) with v2_2_image.FromRegistry(name, creds, transport) as v2_2_img: if v2_2_img.exists(): save.fast(v2_2_img, args.directory, threads=_THREADS) return with v2_image.FromRegistry(name, creds, transport) as v2_img: with v2_compat.V22FromV2(v2_img) as v2_2_img: save.fast(v2_2_img, args.directory, threads=_THREADS) return
def main(): args = parser.parse_args() if not args.tarball or not args.directory: raise Exception('--tarball and --directory are required arguments.') with v2_2_image.FromTarball(args.tarball) as v2_2_img: save.fast(v2_2_img, args.directory, threads=_THREADS)
def main(): logging_setup.DefineCommandLineArgs(parser) args = parser.parse_args() logging_setup.Init(args=args) if not args.tarball or not args.directory: raise Exception('--tarball and --directory are required arguments.') logging.info('Reading v2.2 image from tarball %r', args.tarball) with v2_2_image.FromTarball(args.tarball) as v2_2_img: save.fast(v2_2_img, args.directory, threads=_THREADS)
def main(): logging_setup.DefineCommandLineArgs(parser) args = parser.parse_args() logging_setup.Init(args=args) if not args.name or not args.directory: logging.fatal('--name and --directory are required arguments.') retry_factory = retry.Factory() retry_factory = retry_factory.WithSourceTransportCallable(httplib2.Http) transport = transport_pool.Http(retry_factory.Build, size=_THREADS) if '@' in args.name: name = docker_name.Digest(args.name) else: name = docker_name.Tag(args.name) # OCI Image Manifest is compatible with Docker Image Manifest Version 2, # Schema 2. We indicate support for both formats by passing both media types # as 'Accept' headers. # # For reference: # OCI: https://github.com/opencontainers/image-spec # Docker: https://docs.docker.com/registry/spec/manifest-v2-2/ accept = docker_http.SUPPORTED_MANIFEST_MIMES # Resolve the appropriate credential to use based on the standard Docker # client logic. try: creds = docker_creds.DefaultKeychain.Resolve(name) # pylint: disable=broad-except except Exception as e: logging.fatal('Error resolving credentials for %s: %s', name, e) sys.exit(1) try: logging.info('Pulling v2.2 image from %r ...', name) with v2_2_image.FromRegistry(name, creds, transport, accept) as v2_2_img: if v2_2_img.exists(): save.fast(v2_2_img, args.directory, threads=_THREADS) return logging.info('Pulling v2 image from %r ...', name) with v2_image.FromRegistry(name, creds, transport) as v2_img: with v2_compat.V22FromV2(v2_img) as v2_2_img: save.fast(v2_2_img, args.directory, threads=_THREADS) return # pylint: disable=broad-except except Exception as e: logging.fatal('Error pulling and saving image %s: %s', name, e) sys.exit(1)
def test_publish_fast_stamping(self): td = TestData( 'io_bazel_rules_k8s/examples/hellogrpc/cc/server/server.tar') # name = docker_name.Tag('fake.gcr.io/foo/bar:{STABLE_GIT_COMMIT}') name = "fake.gcr.io/foo/bar:{STABLE_GIT_COMMIT}" stamp_info = {"STABLE_GIT_COMMIT": "9428a3b3"} expected_tag = 'fake.gcr.io/foo/bar:9428a3b3' with v2_2_image.FromTarball(td) as img: (config_path, layer_data) = save.fast(img, self._tmpdir, threads=16) expected_digest = img.digest() print(expected_digest) with mock.patch.object(v2_2_session, 'Push', return_value=NopPush()): (tag, published_tag, digest) = resolver.Publish( _BAD_TRANSPORT, None, stamp_info, name=name, config=config_path, digest=','.join([h for (h, unused) in layer_data]), layer=','.join([layer for (unused, layer) in layer_data])) self.assertEqual(tag, name) self.assertEqual(published_tag, expected_tag) self.assertEqual(digest.digest, expected_digest)
def test_publish_fast(self): td = TestData( 'io_bazel_rules_k8s/examples/hellogrpc/cc/server/server.tar') name = docker_name.Tag('fake.gcr.io/foo/bar:baz') with v2_2_image.FromTarball(td) as img: (config_path, layer_data) = save.fast(img, self._tmpdir, threads=16) expected_digest = img.digest() with mock.patch.object(v2_2_session, 'Push', return_value=NopPush()): (tag, digest) = resolver.Publish( _BAD_TRANSPORT, name=str(name), config=config_path, digest=','.join([h for (h, unused) in layer_data]), layer=','.join([layer for (unused, layer) in layer_data])) self.assertEqual(tag, name) self.assertEqual(digest.digest, expected_digest)
def main(): logging_setup.DefineCommandLineArgs(parser) args = parser.parse_args() logging_setup.Init(args=args) if not args.name or not args.directory: logging.fatal('--name and --directory are required arguments.') retry_factory = retry.Factory() retry_factory = retry_factory.WithSourceTransportCallable(httplib2.Http) transport = transport_pool.Http(retry_factory.Build, size=_THREADS) if '@' in args.name: name = docker_name.Digest(args.name) else: name = docker_name.Tag(args.name) # OCI Image Manifest is compatible with Docker Image Manifest Version 2, # Schema 2. We indicate support for both formats by passing both media types # as 'Accept' headers. # # For reference: # OCI: https://github.com/opencontainers/image-spec # Docker: https://docs.docker.com/registry/spec/manifest-v2-2/ accept = docker_http.SUPPORTED_MANIFEST_MIMES # Resolve the appropriate credential to use based on the standard Docker # client logic. try: creds = docker_creds.DefaultKeychain.Resolve(name) # pylint: disable=broad-except except Exception as e: logging.fatal('Error resolving credentials for %s: %s', name, e) sys.exit(1) try: logging.info('Pulling manifest list from %r ...', name) with image_list.FromRegistry(name, creds, transport) as img_list: if img_list.exists(): platform = image_list.Platform({ 'architecture': _PROCESSOR_ARCHITECTURE, 'os': _OPERATING_SYSTEM, }) # pytype: disable=wrong-arg-types with img_list.resolve(platform) as default_child: save.fast(default_child, args.directory, threads=_THREADS) return # pytype: enable=wrong-arg-types logging.info('Pulling v2.2 image from %r ...', name) with v2_2_image.FromRegistry(name, creds, transport, accept) as v2_2_img: if v2_2_img.exists(): save.fast(v2_2_img, args.directory, threads=_THREADS) return logging.info('Pulling v2 image from %r ...', name) with v2_image.FromRegistry(name, creds, transport) as v2_img: with v2_compat.V22FromV2(v2_img) as v2_2_img: save.fast(v2_2_img, args.directory, threads=_THREADS) return # pylint: disable=broad-except except Exception as e: logging.fatal('Error pulling and saving image %s: %s', name, e) sys.exit(1)
def main(): logging_setup.DefineCommandLineArgs(parser) args = parser.parse_args() logging_setup.Init(args=args) retry_factory = retry.Factory() retry_factory = retry_factory.WithSourceTransportCallable(httplib2.Http) transport = transport_pool.Http(retry_factory.Build, size=_THREADS) if '@' in args.name: name = docker_name.Digest(args.name) else: name = docker_name.Tag(args.name) # If the user provided a client config directory, instruct the keychain # resolver to use it to look for the docker client config if args.client_config_dir is not None: docker_creds.DefaultKeychain.setCustomConfigDir(args.client_config_dir) # OCI Image Manifest is compatible with Docker Image Manifest Version 2, # Schema 2. We indicate support for both formats by passing both media types # as 'Accept' headers. # # For reference: # OCI: https://github.com/opencontainers/image-spec # Docker: https://docs.docker.com/registry/spec/manifest-v2-2/ accept = docker_http.SUPPORTED_MANIFEST_MIMES # Resolve the appropriate credential to use based on the standard Docker # client logic. try: creds = docker_creds.DefaultKeychain.Resolve(name) # pylint: disable=broad-except except Exception as e: logging.fatal('Error resolving credentials for %s: %s', name, e) sys.exit(1) try: logging.info('Pulling manifest list from %r ...', name) with image_list.FromRegistry(name, creds, transport) as img_list: if img_list.exists(): platform = platform_args.FromArgs(args) # pytype: disable=wrong-arg-types with img_list.resolve(platform) as default_child: save.fast(default_child, args.directory, threads=_THREADS) return # pytype: enable=wrong-arg-types logging.info('Pulling v2.2 image from %r ...', name) with v2_2_image.FromRegistry(name, creds, transport, accept) as v2_2_img: if v2_2_img.exists(): save.fast(v2_2_img, args.directory, threads=_THREADS) return logging.info('Pulling v2 image from %r ...', name) with v2_image.FromRegistry(name, creds, transport) as v2_img: with v2_compat.V22FromV2(v2_img) as v2_2_img: save.fast(v2_2_img, args.directory, threads=_THREADS) return # pylint: disable=broad-except except Exception as e: logging.fatal('Error pulling and saving image %s: %s', name, e) sys.exit(1)