gcloud выдал ошибку (ValueError): Тип команды [CommandType.DESCRIBE] уже зарегистрирован

Вопрос или проблема

Я сталкиваюсь с некоторыми странными ошибками при использовании некоторых команд gcloud CLI. Эти команды работали до определенного момента на прошлой неделе.

Большинство команд gcloud CLI работают нормально, но несколько, которые нам нужны для наших сценариев развертывания, выдают странные ошибки, как указано ниже:

gcloud redis instances describe myinstance --region=us-central1
ОШИБКА: gcloud аварийно завершил работу (InvalidSchemaError): Команды ожидания должны включать асинхронный раздел.

и

gcloud compute networks vpc-access connectors list --region=us-central1
ОШИБКА: gcloud аварийно завершил работу (ValueError): Тип команды [CommandType.DESCRIBE] уже был зарегистрирован.

Я удалил и снова установил SDK, но ошибка продолжает возникать. Также наблюдается на машинах коллег. (все они на MacOS на процессорах M1)

Версии, на которых мы это видели:

  • 406.0.0 (перед переустановкой)
  • 407.0.0 (после переустановки)
  • 380.0.0 (машина коллеги)
  • 373.0.0 (машина другого коллеги)

Я проверил which gcloud, чтобы убедиться, что это правильная команда.

Команда работает нормально в Cloud Shell.

Кто-то еще с этим сталкивается? Что я делаю не так?

Вы работаете в оболочке, где python указывает на версию python 3.11?

Если вы используете pyenv, то можете сделать:

pyenv install 3.10.6
pyenv global 3.10.6

чтобы вернуться к более старой версии. Это сработало для меня.

Комментирую свой собственный пост для всех, кто с этим столкнется.

Похоже, что gcloud пытался использовать python2. Удаление всех ссылок на python2 в /usr/local/bin, похоже, решило проблему для меня, но у коллеги, который никогда не устанавливал Python2, все еще есть проблема.

У нас есть устаревший проект, который все еще нуждается в Py2.

Ответ на 2024 год, у меня была ошибка:

ОШИБКА: gcloud аварийно завершил работу (ValueError): Тип команды [CommandType.DESCRIBE] уже был зарегистрирован.

✅ Я исправил ошибку, обновив до последней версии gcloud CLI через ✅

gcloud components update

Вы можете выполнить gcloud version, и он предупредит вас, если обновления доступны.

В прошлом общая причина заключалась в несовпадении версий python, и многие статьи указывают на необходимость понижения версии python. В настоящее время поддерживаются более новые версии python 3.8 – 3.13.

Смотрите документацию Google, чтобы проверить текущие поддерживаемые версии python.

Что касается этой ошибки – к сожалению, похоже, что она вызвана непойманными ошибками из внутреннего инструмента CLI Google. Таким образом, существует много различных причин в редкие и необычные моменты, которые могут вызвать такую ошибку.

Ответ или решение

Ошибка gcloud: (ValueError): Command type [CommandType.DESCRIBE] has already been registered

Вы столкнулись с проблемой при использовании командной строки gcloud, что, безусловно, может вызвать беспокойство, особенно если эти команды были рабочими на протяжении длительного времени. Ошибка, которую вы видите, указывает на несколько возможных причин, и в этом ответе мы рассмотрим основные из них и предложим решения для их устранения.

1. Версии Google Cloud SDK

Вы упомянули, что различные версии gcloud SDK установлены на ваших и ваших коллегах машинах:

  • 406.0.0 (до переустановки)
  • 407.0.0 (после переустановки)
  • 380.0.0 (машина коллеги)
  • 373.0.0 (другая машина коллеги)

Обратите внимание, что часто обновления SDK могут не только добавлять новые функции, но и вносить изменения в работу команд. Рекомендуется всегда поддерживать Google Cloud SDK на актуальном уровне. Чтобы обновить версии, используйте команду:

gcloud components update

После обновления также проверьте версию с помощью:

gcloud version

Если модули не обновляются, это может быть связано с зависимостями на уровне системы или с несовместимостью Python.

2. Python и его версии

Ошибки, связанные с gcloud, часто возникают из-за несовпадения версий Python. Ваша проблема может быть связана с тем, что gcloud пытается использовать Python 2, который не поддерживается в новых версиях Google Cloud SDK, или с использованием версии Python 3.11, которая может быть не полностью совместима. Рекомендуется использовать версии Python 3.8 – 3.10. Для этого можно выполнить следующие команды:

pyenv install 3.10.6
pyenv global 3.10.6

Проверьте переменные окружения, чтобы убедиться, что у вас нет конфликтов с установленными версиями Python.

3. Удаление старых версий Python

Если у вас есть старые версии Python, особенно Python 2, это может вызвать конфликты. Как вы заметили, удаление всех ссылок на Python 2 в /usr/local/bin может помочь. Также убедитесь, что в ваших переменных окружения (например, PATH) нет старых ссылок.

4. Работа в облачной среде

Вы упомянули, что эти команды работают в Cloud Shell, что говорит о том, что проблема локальна. Если у вас есть доступ к Cloud Shell, вы также можете использовать его как временную альтернативу при работе с gcloud, пока не решите проблему на локальных машинах.

5. Заключение

Ошибки gcloud могут быть непредсказуемыми и зависеть от множества факторов, включая версии SDK и Python, конфликты в установленных компонентах и другие системные особенности. Постарайтесь удостовериться, что ваша система полностью соответствует рекомендациям Google, поддерживайте актуальность всех инструментов и избегайте изменения системных зависимостей, если вы не уверены в действиях.

Если после всех вышеуказанных действий проблема сохраняется, рекомендуется обратиться в службу поддержки Google Cloud для получения более целенаправленной помощи, так как это может быть связано с более глубокими проблемами на стороне SDK.

Оцените материал
Добавить комментарий

Капча загружается...