Je n'arrive pas à faire en sorte que gsutil utilise les informations d'identification oAuth2.0 utilisées par gcloud.
Your "Oauth 2.0 User Account" credentials are invalid. Please run
$ gcloud auth login
Failure: unauthorized_client.
J'avais l'habitude d'installer gsutil via pip et avec 4.20 installé, je peux faire gsutil config
et ça marche bien.
Lors de l'installation à partir du SDK Cloud
curl https://sdk.cloud.google.com | bash
J'exécute ensuite gcloud auth login
en suivant ces étapes et les rapports gcloud se connectent.
Informations sur Gcloud
Google Cloud SDK [119.0.0]
Platform: [Mac OS X, x86_64]
Python Version: [2.7.12 (default, Jun 29 2016, 14:05:02) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)]]
Python Location: [/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python]
Site Packages: [Disabled]
Installation Root: [/Users/domster83/google-cloud-sdk]
Installed Components:
core: [2016.07.21]
core-nix: [2016.03.28]
gcloud: []
gsutil-nix: [4.18]
gsutil: [4.19]
bq: [2.0.24]
bq-nix: [2.0.24]
System PATH: [/Users/domster83/.rbenv/shims:/Users/domster83/google-cloud-sdk/bin:/Users/domster83/laptop/bin:~/bin:/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:usr/local/heroku/bin:/usr/local/sbin:/usr/local/lib/node_modules:/Users/domster83/projects/go/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin]
Cloud SDK on PATH: [True]
Installation Properties: [/Users/domster83/google-cloud-sdk/properties]
User Config Directory: [/Users/domster83/.config/gcloud]
Active Configuration Name: [default]
Active Configuration Path: [/Users/domster83/.config/gcloud/configurations/config_default]
Account: [[email protected]]
Project: [my-bucket]
Current Properties:
[core]
project: [my-bucket]
account: [[email protected]]
disable_usage_reporting: [False]
Logs Directory: [/Users/domster83/.config/gcloud/logs]
Last Log File: [/Users/domster83/.config/gcloud/logs/2016.08.02/15.49.49.740983.log]
gsutil -D
gsutil version: 4.19
checksum: 67da5fbdef140f1663fbb11e96bb9f90 (OK)
boto version: 2.39.0
python version: 2.7.12 (default, Jun 29 2016, 14:05:02) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)]
OS: Darwin 16.0.0
multiprocessing available: True
using cloud sdk: True
config path: /Users/domster83/.boto
gsutil path: /Users/domster83/google-cloud-sdk/platform/gsutil/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
Command being run: /Users/domster83/google-cloud-sdk/platform/gsutil/gsutil -o GSUtil:default_project_id=trilbytv-1191 -D
config_file_list: ['/Users/domster83/.boto']
config: [('debug', '0'), ('working_dir', '/mnt/pyami'), ('https_validate_certificates', 'True'), ('debug', '0'), ('working_dir', '/mnt/pyami'), ('content_language', 'en'), ('default_api_version', '2'), ('default_project_id', 'my-bucket')]
J'ai déjà mis à jour boto vers 2.42.0 via pip, j'ai essayé de réinstaller le cloud-sdk à un autre endroit.
J'ai l'impression de tourner en rond.
L'installation de pip et l'installation de gcloud sont distinctes l'une de l'autre. Si vous utilisez l'installation pip, alors gsutil config
configurera votre fichier .boto. Mais si vous utilisez une installation gcloud, alors gcloud auth login
doit être utilisé. Tu as l'air de mélanger les deux configurations ? Pourriez-vous essayer les étapes suivantes :
/Users/domster83/.boto
gcloud auth login
J'avais complètement désinstallé gsutil via pip et supprimé le fichier .boto avant d'installer le sdk standard.
Le 2 août 2016, à 20h01, thobrla [email protected] a écrit :
L'installation de pip et l'installation de gcloud sont distinctes l'une de l'autre. Si vous utilisez l'installation pip, gsutil config configurera votre fichier .boto. Mais si vous utilisez une installation gcloud, la connexion auth gcloud doit être utilisée. Tu as l'air de mélanger les deux configurations ? Pourriez-vous essayer les étapes suivantes :
- Supprimer /Users/domster83/.boto
- Exécutez la connexion d'authentification gcloud
- Exécutez gsutil
—
Vous recevez ceci parce que vous êtes l'auteur du fil.
Répondez directement à cet e-mail, consultez-le sur GitHub ou désactivez le fil de discussion.
Donc, gsutil version -l
affiche-t-il maintenant un chemin de configuration avec un fichier .boto dans .config/gcloud ?
@thobrla ah ! Non, mais vous m'avez aidé à comprendre. Bien que cela ressemble à un bug.
Actuellement, cela produit
gsutil version: 4.19
checksum: 67da5fbdef140f1663fbb11e96bb9f90 (OK)
boto version: 2.39.0
python version: 2.7.12 (default, Jun 29 2016, 14:05:02) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)]
OS: Darwin 16.0.0
multiprocessing available: True
using cloud sdk: True
config path: /Users/domster83/.boto
gsutil path: /Users/domster83/google-cloud-sdk/platform/gsutil/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
Et ça m'a fait penser à moi ENV. J'avais BOTO_CONFIG défini dans mon bash_profile comme
export BOTO_CONFIG="$HOME/.boto"
Ce qui m'a donné BOTO_CONFIG=/Users/domster83/.boto
comme ENV VAR.
Si je commente cette ligne et recharge mon terminal, sans l'ENV VAR j'obtiens
gsutil version: 4.19
checksum: 67da5fbdef140f1663fbb11e96bb9f90 (OK)
boto version: 2.39.0
python version: 2.7.12 (default, Jun 29 2016, 14:05:02) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)]
OS: Darwin 16.0.0
multiprocessing available: True
using cloud sdk: True
config path: /Users/domster83/.boto
gsutil path: /Users/domster83/google-cloud-sdk/platform/gsutil/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
MAIS .... gsutil fonctionne maintenant. Il montre le même chemin de configuration, même fichier cependant. Ni l'un ni l'autre ne sont .config/gcloud
Je pense qu'il y a un bogue ici - lors de la recherche du chemin de configuration, nous nous arrêtons lors de la découverte du premier fichier valide, mais plusieurs fichiers peuvent être spécifiés via la variable BOTO_PATH (c'est ainsi que gcloud transmet les informations d'identification à gsutil).
Je crois que je rencontre également ce problème de fichier de configuration. Je souhaite définir use_magicfile
dans un dépôt contrôlé par version plutôt que dans un fichier de configuration global, afin de servir des pages Web sans extensions .html
.
Si je définis des variables BOTO_CONFIG
ou BOTO_PATH
, je perds les informations d'identification que j'ai définies avec gcloud auth login
. Un gsutil rsync
donne :
401 Anonymous users does not have storage.objects.list access to bucket foo.example.com.
Notez que cela se produit même si BOTO_CONFIG
pointe vers /home/blah/.boto
En regardant le code boto.pyami.config, nous ne chargeons plusieurs fichiers .boto que si :
Donc, afin d'utiliser plusieurs fichiers de configuration, vous voudrez ajouter le chemin de votre configuration .boto spécifique au dépôt (qui, d'après votre description ci-dessus, ne devrait contenir que les options de configuration que j'ai montrées ci-dessous) à l'ensemble de chemins dans votre variable BOTO_PATH. Notez qu'ils sont chargés dans l'ordre, vous devez donc ajouter ce chemin plutôt que de le préfixer.
[GSUtil]
use_magicfile = True
J'ai testé cela moi-même avec gsutil v4.22 en remplaçant l'option default_project_id
dans mon deuxième fichier .boto, en exécutant export BOTH_PATH=/path/to/second/boto/config
, puis en exécutant gsutil ls
(le binaire gsutil inclus avec le gcloud SDK, qui utilise un script wrapper pour définir la variable d'environnement BOTO_PATH) pour s'assurer qu'il répertorie les buckets dans le projet par défaut spécifié par ma deuxième configuration.
En ce qui concerne le commentaire de thobrla , je vais obtenir un correctif pour m'assurer que lorsque les conditions 1 et 2 ci-dessus sont vraies, nous affichons tous les fichiers de configuration lisibles dans la sortie pour gsutil version -l
.
Merci @houglum ! Je vais essayer.
Pas de chance :
~$ head ~/.boto
# This file contains credentials and other configuration information needed
# by the boto library, used by gsutil. You can edit this file (e.g., to add
# credentials) but be careful not to mis-edit any of the variable names (like
# "gs_access_key_id") or remove important markers (like the "[Credentials]" and
# "[Boto]" section delimiters).
#
# This file was created by gsutil version 4.22 at 2017-02-26 10:29:13.
#
# You can create additional configuration files by running
# gsutil config [options] [-o <config-file>]
~$ cat /Users/foo/bar/.boto
[GSUtil]
use_magicfile = True
~$ unset BOTO_PATH
~$ gsutil ls
~$ echo $?
0
~$ export BOTO_PATH="/Users/foo/.boto"
~$ gsutil ls
ServiceException: 401 Anonymous users does not have storage.buckets.list access to project 9999999.
~$ export BOTO_PATH="/Users/foo/.boto:/Users/foo/bar/.boto"
~$ gsutil ls
ServiceException: 401 Anonymous users does not have storage.buckets.list access to project 9999999.
~$ export BOTO_PATH="/Users/foo/bar/.boto"
~$ gsutil ls
ServiceException: 401 Anonymous users does not have storage.buckets.list access to project 9999999.
Oh hé, je peux tout à fait reproduire cela aujourd'hui. Je pense que le shell que j'utilisais hier avait des alias restants pour gsutil, de sorte que j'invoquais une version non gcloud. Désolé pour la confusion :)
Quoi qu'il en soit, en réalisant cela, j'ai compris qu'il s'agissait d'un bogue avec le script d'amorçage gsutil utilisé par gcloud, /path-to-cloud-sdk/bin/bootstrapping/gsutil.py. Voici l'extrait coupable :
# We construct a BOTO_PATH that tacks the refresh token config
# on the end.
if boto_config:
boto_path = os.pathsep.join([boto_config, gsutil_path])
elif boto_path:
boto_path = os.pathsep.join([boto_path, gsutil_path])
else:
path_parts = ['/etc/boto.cfg',
os.path.expanduser(os.path.join('~', '.boto')),
gsutil_path]
boto_path = os.pathsep.join(path_parts)
if 'BOTO_CONFIG' in os.environ:
del os.environ['BOTO_CONFIG']
os.environ['BOTO_PATH'] = boto_path
Cette dernière ligne doit être décalée vers la gauche d'un niveau d'indentation afin qu'elle soit appliquée quels que soient les prédicats ci-dessus qui soient vrais. Je vais informer nos gens de gcloud afin que nous puissions résoudre ce problème.
(En outre, WRT mon commentaire précédent, il semble que le script gcloud transmette son projet par défaut configuré en tant qu'option de niveau supérieur, c'est-à-dire "-o 'GSUtil:default_project_id=...'", donc on ne peut pas écraser le projet par défaut en utilisant un fichier .boto local.)
Ce correctif, comme indiqué ci-dessus, est inclus dans la version la plus récente de gcloud, et ce02232 corrige le problème de liste de configuration. Fermant ça.
Commentaire le plus utile
L'installation de pip et l'installation de gcloud sont distinctes l'une de l'autre. Si vous utilisez l'installation pip, alors
gsutil config
configurera votre fichier .boto. Mais si vous utilisez une installation gcloud, alorsgcloud auth login
doit être utilisé. Tu as l'air de mélanger les deux configurations ? Pourriez-vous essayer les étapes suivantes :/Users/domster83/.boto
gcloud auth login