Shim para ejecutar gcloud storage

Información general

El SDK de Cloud incluye una nueva CLI, gcloud storage, que puede ser considerablemente más rápida que gsutil al realizar cargas y descargas con menos ajustes de parámetros. Esta nueva CLI tiene una sintaxis y una estructura de comandos similares a las de los usuarios de gsutil, pero es fundamentalmente diferente en muchos aspectos importantes. Para facilitar la transición a esta nueva CLI, gsutil proporciona un shim que traduce tus comandos de gsutil a comandos de almacenamiento de gcloud si existe un equivalente y vuelve al comportamiento habitual de gsutil si no existe.

Para habilitar

Asigna el valor use_gcloud_storage=True a la sección [GSUtil] del archivo de configuración .boto:

[GSUtil]
use_gcloud_storage=True

También puedes definir la marca para comandos concretos mediante la marca -o de nivel superior:

gsutil -o "GSUtil:use_gcloud_storage=True" -m cp -p file gs://bucket/obj

Comandos disponibles

La interfaz de línea de comandos de gcloud storage solo admite un subconjunto de comandos de gsutil. A continuación, se muestra una lista de comandos admitidos por el shim, así como las diferencias de comportamiento.

acl

  • El subcomando ch no se admite.

autoclass

  • Funciona como se espera.

bucketpolicyonly

  • Funciona como se espera.

gato

  • Imprime los datos de un segundo objeto aunque el primero no sea válido.

compose

  • Funciona como se espera.

cors

  • El subcomando get imprime "[]" en lugar de "gs://[nombre_del_cubo] has no CORS configuration".

cp

  • Copia un segundo objeto aunque el primero no sea válido.

  • No admite copias de archivo a archivo.

  • Permite copiar objetos de una nube a otra con barras diagonales al final del nombre.

  • La marca de todas las versiones (-A) habilita de forma silenciosa la ejecución secuencial en lugar de generar un error.

defacl

  • El subcomando ch no se admite.

defstorageclass

  • Funciona como se espera.

hash

  • En gsutil, las marcas -m y -c que afectan a los hashes que se muestran se ignoran en los objetos en la nube. Este comportamiento se ha corregido en el shim y en gcloud storage.

iam

  • El subcomando ch no se admite.

  • La marca -f continuará en caso de error, no solo en caso de errores de la API.

kms

  • El subcomando authorize devuelve mensajes informativos en un formato diferente.

  • El subcomando de cifrado devuelve mensajes informativos en un formato diferente.

etiquetas

  • El subcomando get imprime "[]" en lugar de "gs://[nombre_del_cubo] has no labels configuration.".

lifecycle

  • Funciona como se espera.

logging

  • El subcomando get tiene un espaciado JSON diferente y no imprime un mensaje informativo si no se encuentra ninguna configuración.

ls

  • Funciona como se espera.

mb

  • Funciona como se espera.

mv

  • Consulta las notas sobre cp.

notificación

  • El subcomando list imprime información de configuración en formato YAML.

  • El subcomando delete ofrece seguimiento del progreso y paralelización.

pap

  • Funciona como se espera.

rb

  • Funciona como se espera.

requesterpays

  • Funciona como se espera.

rewrite

  • La marca -k no genera un error si se llama sin una clave nueva. En ambos casos, se mantiene la clave antigua.

rm

  • No se admiten los marcadores de eliminación de $folder$.

rpo

  • Funciona como se espera.

setmeta

  • No devuelve ningún error si no se cambia ningún encabezado.

stat

  • Incluye el campo "Storage class update time:" (Hora de actualización de la clase de almacenamiento), que puede provocar que se desajuste la tabulación.

ubla

  • Funciona como se espera.

versioning

  • Funciona como se espera.

web

  • El subcomando get tiene un espaciado JSON diferente y no imprime un mensaje informativo si no se encuentra ninguna configuración.

Configuración de Boto

La configuración encontrada en el archivo de boto se asigna de forma individual a las variables de entorno de gcloud cuando procede.

[Credentials]

  • aws_access_key_id: AWS_ACCESS_KEY_ID

  • aws_secret_access_key: AWS_SECRET_ACCESS_KEY

  • use_client_certificate: CLOUDSDK_CONTEXT_AWARE_USE_CLIENT_CERTIFICATE

[Boto]

  • proxy: CLOUDSDK_PROXY_ADDRESS

  • proxy_type: CLOUDSDK_PROXY_TYPE

  • proxy_port: CLOUDSDK_PROXY_PORT

  • proxy_user: CLOUDSDK_PROXY_USERNAME

  • proxy_pass: CLOUDSDK_PROXY_PASSWORD

  • proxy_rdns: CLOUDSDK_PROXY_RDNS

  • http_socket_timeout: CLOUDSDK_CORE_HTTP_TIMEOUT

  • ca_certificates_file: CLOUDSDK_CORE_CUSTOM_CA_CERTS_FILE

  • max_retry_delay: CLOUDSDK_STORAGE_BASE_RETRY_DELAY

  • num_retries: CLOUDSDK_STORAGE_MAX_RETRIES

[GSUtil]

  • check_hashes: CLOUDSDK_STORAGE_CHECK_HASHES

  • default_project_id: CLOUDSDK_CORE_PROJECT

  • disable_analytics_prompt: CLOUDSDK_CORE_DISABLE_USAGE_REPORTING

  • use_magicfile: CLOUDSDK_STORAGE_USE_MAGICFILE

  • parallel_composite_upload_threshold: CLOUDSDK_STORAGE_PARALLEL_COMPOSITE_UPLOAD_THRESHOLD

  • resumable_threshold: CLOUDSDK_STORAGE_RESUMABLE_THRESHOLD

[OAuth2]

  • client_id: CLOUDSDK_AUTH_CLIENT_ID

  • client_secret: CLOUDSDK_AUTH_CLIENT_SECRET

  • provider_authorization_uri: CLOUDSDK_AUTH_AUTH_HOST

  • provider_token_uri: CLOUDSDK_AUTH_TOKEN_HOST

Notas generales sobre la compatibilidad

  • Gracias a su compatibilidad con todas las plataformas principales, el multiprocesamiento está habilitado de forma predeterminada para todos los comandos (es como si la opción -m siempre estuviera incluida en gsutil).

  • Una secuencia de asteriscos mayor que 2 (es decir, ***) siempre se trata como un solo asterisco.

  • A diferencia de gsutil, gcloud no se ha diseñado para usarse en invocaciones paralelas, por lo que hacerlo (es decir, ejecutar el shim desde dos terminales a la vez) puede provocar un comportamiento impredecible.

  • Supongamos que un contenedor contiene un objeto gs://bucket/nested/foo.txt. El iterador de comodines de gsutil coincidirá con foo.txt si se le proporciona una URL como gs://bucket/*/nested/*. El shim no coincidirá con foo.txt dada la misma URL.

  • Se actualizará a medida que gcloud storage y el shim admitan nuevos comandos.

  • Si Unicode tiene problemas, prueba a definir la variable de entorno PYTHONUTF8 en 1. En concreto, esto puede ser útil en la línea de comandos (CMD) de Windows.