Вы правы, в документации отсутствует информация, которая бы ответила на ваши вопросы по этим параметрам.
Однако это помогает узнать, что происходит в примере Depoyment Manager, который вы связали.
Прежде всего, следующая строка в config.yaml - вот где все усложняется:
resources:
- name: my-bigtable
type: bigtable.py
Эта строка будет вызывать файл bigtable.py
python, который устанавливает тип ресурса развертывания, который находится в нем, в функции GenerateConfig
. Узнайте, как это делается, здесь.
Ресурсы возвращаются как {'resources': resources}
в конце, поскольку переменная ресурсов представляет собой список шаблоны, созданные там.
Эти шаблоны имеют разные идентификаторы имен, которые задаются тегом "name"
. Таким образом, вы не создаете в этом файле три разных экземпляра с именами instance_create
, instance_update
и instance_delete
, но вы создаете три шаблона с этими именами, которые позже будут добавлены в список resources
и позже возвращены в config.yaml resources.type
ярлык. Затем эти шаблоны будут последовательно построены и выполнены менеджером развертывания после использования команды create. Обратите внимание, что они могут отображаться не по порядку, это связано с тем, что не используется схему.
Эту структуру легче увидеть в формате файла .yaml
, например, созданного с помощью jinja
, опубликованный вами шаблон будет выглядеть следующим образом:
resources:
- action: gcp-types/bigtableadmin-v2:bigtableadmin.projects.instances.create
name: instance_create
metadata:
runtimePolicy:
- CREATE
properties:
clusters:
initial:
defaultStorageType: HDD
location: projects/<PROJECT_ID>/locations/<PROJECT_LOCATION>
serveNodes: 4
instance:
displayName: My BigTable Instance.
type: PRODUCTION
instanceId: my-instance
parent: projects/<PROJECT_ID>
Обратите внимание, что параметры в properties
- это поля в теле запроса к bigtableadmin.projects.instances.create (который содержит параметры объекта кластеров и параметры объекта экземпляра). Обратите внимание, что InstanceId в свойствах всегда один и тот же, поэтому экземпляр BigTable, для которого шаблоны выполняют вызовы, всегда один и тот же.
Дело в том, что не только связанный вами пример создает различные шаблоны для запуска в одном скрипте, но и тип ресурса для каждого шаблона - это вызов API BigTable.
Обычно ресурсы шаблона указываются с помощью тега type
, но поскольку вы вызываете ресурс, который непосредственно выполняет вызов API (т.е. вместо того, чтобы просто указывать gcp-types/bigtableadmin-v2
, вы указываете bigtableadmin-v2:bigtableadmin.projects.instances.create
), используется тег action
. Я нигде не обнаружил такой разницы в использовании, но ее нужно указать именно так. Вы узнаете, вызываете ли вы «конечную точку» API напрямую, если ресурс заканчивается на create / update / delete.
Наконец, я исследовал на своей стороне, и metadata.runtimePolicy
привязан к тому факту, что тип ресурса - это вызов API (как в предыдущем пункте). Еще раз, я нигде не нашел этого документированного. Однако, поскольку это является обязательным требованием, вам всегда нужно будет указывать правильное значение в этом поле. По сути, это сводится к тому, чтобы установить metadata.runtimePolicy
на эти значения, в зависимости от того, какой тип API-вызова вы выполняете:
create -> ['CREATE']
update -> ['UPDATE_ON_CHANGE']
delete -> ['DELETE']
Подведение итогов:
- Вы создаете не три разных экземпляра, а три разных шаблона, которые работают с одним и тем же экземпляром BigTable.
- Вам нужно изменить флаг ресурса
type
на action
, если вы вызываете конечную точку API (создание / обновление / удаление), вместо того, чтобы просто именовать базовый API.
- Значение
metadata.runtimePolicy
является обязательным при вызове одной из вышеупомянутых конечных точек.
person
Joan Grau Noël
schedule
10.01.2019