Exemple #1
0
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
Exemple #3
0
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)
Exemple #6
0
    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)
Exemple #7
0
    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)
Exemple #9
0
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)