Получение метаданных [дубликат]

Это очень просто: если вы пытаетесь придать объект класса A объекту класса B, и они несовместимы, вы получаете исключение класса cast.

Давайте подумаем набор классов.

class A {...}
class B extends A {...}
class C extends A {...}
  1. Вы можете передать любую из этих вещей объекту, потому что все классы Java наследуются от Object.
  2. Вы можете использовать либо B, либо C к A, потому что они оба являются «видами» A
  3. . Вы можете ссылаться на объект A на B , только если реальный объект является B.
  4. Вы не можете отбрасывать B на C, даже если они оба A.
5
задан jcjones1515 16 December 2016 в 00:48
поделиться

2 ответа

Некоторые дружелюбные люди на канале GCP slack указали мне на RuntimeConfig API для совместного использования конфигурации для нескольких типов сервисов в Google Cloud. Это решает проблему совместного использования конфигураций, которые я искал.

Для любопытных вам необходимо:

  1. Включить API в диспетчере API для вашего проекта облака Google
  2. Запустить некоторые gcloud команды:
    gcloud beta deployment-manager runtime-configs create foo-credentials
    gcloud beta deployment-manager runtime-configs variables set "bar-variable-name" "baz-value"  --config-name "foo-credentials"```
    
  3. Добавьте библиотеку python google-cloud-runtimeconfig в свой проект (я сделал это через pip)
  4. Добавьте код python для извлечения переменной во время выполнения:
    config_client = runtimeconfig.Client()
    config = config_client.config('foo-credentials')
    bar = config.get_variable('bar-variable-name')```
    
6
ответ дан jcjones1515 18 August 2018 в 00:57
поделиться

Нет, вы не можете получить доступ к метаданным (GCE-специфическим) из стандартного экземпляра GAE, поскольку он не является экземпляром GCE VM /. Из Получение метаданных (выделено мной):

Вы можете запросить содержимое сервера метаданных, сделав запрос на следующие корневые URL-адреса из экземпляра виртуальной машины. Используйте URL http://metadata.google.internal/computeMetadata/v1/ для выполнения запросов на сервер метаданных.

Ошибка DNS, которую вы видите для metadata.google.internal, является вероятным индикатором того, что это специальная запись DNS хоста, доступная только внутри GCE сети или компьютера.

Но в общем случае можно обмениваться файлами через службы / модули GAE, символизируя один и тот же файл (идеально расположенный в каталоге приложения) внутри каждого из них, требуя его. См. Примеры здесь: Совместное использование сущностей между модулями App Engine и здесь: https://stackoverflow.com/a/34111170/4495081

Пока модуль / модуль flex использует один и тот же файл (ы) файла (ов) таким же образом, как и стандартный, этот метод должен работать и для них, то есть вы можете делиться конфигурациями, например, используя файл appengine_config.py.

2
ответ дан Community 18 August 2018 в 00:57
поделиться
  • 1
    спасибо @Dan, это тоже мое подозрение. Я не думаю, что трюк symlink между сервисами (хотя и классный) будет работать между App Engine flex и стандартом App Engine? – jcjones1515 7 December 2016 в 16:29
  • 2
    Я еще не играл с flex env, поэтому я не могу сказать с уверенностью. Но, может быть, стоит попробовать? – Dan Cornilescu 7 December 2016 в 16:42
  • 3
    вещь @Dan - у меня есть несколько независимых сервисов, которые не из одной общей базы кода, но я хочу, чтобы они могли делиться метаданными для конфигурации. Наличие символических ссылок между ними не имеет смысла, поскольку в некоторых случаях они даже не знают друг о друге – jcjones1515 8 December 2016 в 17:40
  • 4
    @ jcjones1515: Я упомянул символические ссылки, которые думают только о том, что соответствующие конфигурации синхронизируются между модулями (дублирующая информация подвержена ошибкам). Разумеется, это должно быть проверено в вашем реальном контексте проекта. – Dan Cornilescu 8 December 2016 в 17:53
Другие вопросы по тегам:

Похожие вопросы: